{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "参考：\n",
    "- <https://blog.csdn.net/weixin_42462202/article/details/99089020>\n",
    "- <https://blog.csdn.net/pang_gua/article/details/86599782>\n",
    "- <https://blog.csdn.net/leixiaohua1020/article/details/50534369>\n",
    "- [网络抽象层单元类型 (NALU)](https://www.jianshu.com/p/a19f3e63b433)\n",
    "- [I 帧,B帧,P帧,IDR帧的区别](https://blog.csdn.net/qq_29350001/article/details/73770702)\n",
    "- [一步一步解析H.264码流的NALU(SPS,PSS,IDR)](guoh.org/lifelog/2013/10/h-264-bit-stream-sps-pps-idr-nalu/\n",
    ")\n",
    "- [LIVE555---testRTSPClient 实例](https://blog.csdn.net/qq_29350001/article/details/78051767)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 为什么使用 RTP 协议？\n",
    "\n",
    "- TCP 传输流媒体数据由于其可靠性，会造成很大的网络延时和卡顿。\n",
    "- UDP 传输由于其不可靠性，会导致丢帧，如果是关键帧，则会花屏一个序列的时长。\n",
    "- RTP 使用了 RTP 和 RTCP 两个子协议来完成。\n",
    "\n",
    "  - RTP 使用 UDP 完成流媒体数据传输，保证其时效性。\n",
    "  - RTCP 也是使用 UDP，但只传输控制信息，占带宽很小，此时上层根据 RTCP 的信息，按照其重要性决定是否对丢失的流媒体数据进行重传。\n",
    "  - RTP 在 1025-65535 之间选择一个未使用的偶数端口号作为其端口，RTCP 则使用下一个奇数端口号作为其端口，进而组成一个 UDP 端口对，端口号 5004 和 5005 作为 RTP 和 RTCP 的默认端口号。\n",
    "\n",
    "- RTP-Header 的流媒体特性，提供 帧边界、编码格式、序列号、时间戳等字段。\n",
    "RTP 支持网络多播，而 TCP 不支持。\n",
    "\n",
    "---\n",
    "\n",
    "#  H.264的NALU格式\n",
    "\n",
    "- 拆解：H264 --> 序列(SPS.PPS.IPBBP…) --> Frame(帧) --> slice(切片) --> 宏块 --> 子宏块。\n",
    "- 序列：一段 H264 序列是指从一个 I 帧开始到下一个 I 帧前的所有帧的集合。\n",
    "\n",
    "- NALU：H264 被封装在一个个 NALU（Network Abstraction Layer Unit）中进行传输。\n",
    "NALU 以 [00 00 00 01] 为开始码，之后是 `NaluHeader`，再之后是 `NaluPayload`。\n",
    "\n",
    "  eg: [00 00 00 01 67 2F A4 1E 23 59 1E 42 … ].\n",
    "\n",
    "H.264原始码流（又称为“裸流”）是由一个一个的`NALU`组成的。他们的结构如下图所示。\n",
    "\n",
    "![rtp](../assets/rtp10.jpg)\n",
    "\n",
    "每个NALU之间使用`0x000001`（3Byte）或者`0x00000001`（4Byte）分隔开.\n",
    "\n",
    "如果NALU对应的分片为一帧的开始就用`0x00000001`，否则就用`0x000001`。\n",
    "H.264码流解析的步骤就是首先从码流中搜索`0x000001`和`0x00000001`，分离出NALU；然后再分析NALU的各个字段。\n",
    "\n",
    "每个`NALU`的第一次字节都有特殊的含义，其内容如下:\n",
    "\n",
    "|位    | 描述|\n",
    "|------  |:---------:|\n",
    "|bit[7]  | **最高位必须为0**|\n",
    "|bit[5-6]|标记该NALU的**优先级(0, 1, 2, 3)**\n",
    "bit[0-4]| **NALU单元的类型**|\n",
    "\n",
    "常见的NALU单元类型：\n",
    "```\n",
    "00 00 00 01 67(SPS)\n",
    "00 00 00 01 68(PPS)\n",
    "00 00 00 01 65(IDR 帧)\n",
    "00 00 00 01 61(P帧)\n",
    "```\n",
    "\n",
    "# H.264的三种RTP打包方式\n",
    "\n",
    "RTP 封包时会将`[00 00 00 01]` 的开始码去除。(**注：在收到 RTP 包时需要在每个 NALU 头的位置拼接此开始码，并保存成h264文件即可播放)**\n",
    "\n",
    "eg：[RTP-Header] + [ 67 2F A4 1E 23 59 1E 42 … ].\n",
    "\n",
    "H.264可以由三种RTP封包策略:\n",
    "\n",
    "- **单NALU打包(Single NALU)**\n",
    "\n",
    "  一个RTP载荷包含一个完整的`NALU`,此时，RTP 的结构为:\n",
    "  \n",
    "  RtpHeader + RtpPayload(NaluHeader + NaluPayload).\n",
    "\n",
    "\n",
    "- **聚合打包(STAP-A)**\n",
    "\n",
    "  对于较小的NALU，一个RTP载荷可包含多个完整的`NALU`，通过`0x000001`或者`0x00000001`分隔。\n",
    "\n",
    "\n",
    "- **分片打包(FU-A)**\n",
    "\n",
    "  如果 NALU 长度超过 MTU(最大传输单元) 时，则需要对 NALU 进行分片封包。此时，RTP 的结构为 :\n",
    "  \n",
    "  RtpHeader + RtpPayload**(FuIndicator + FuHeader + NaluPayload).**\n",
    "  \n",
    "  会比完整包**多一个字节**的头信息，\n",
    "\n",
    "\n",
    "**注意**：每一个RTP包都包含一个RTP头部和RTP荷载，这是固定的.比较常用的是`单NALU打包`和`分片打包`.\n",
    "\n",
    "\n",
    "## 单NALU打包\n",
    "\n",
    "所谓单NALU打包就是将一整个NALU的数据放入RTP包的载荷中\n",
    "这是最简单的一种方式，无需过多的讲解\n",
    "\n",
    "## 分片打包\n",
    "\n",
    "每个RTP包都有大小限制的，因为RTP一般都是使用UDP发送，UDP没有流量控制，所以要限制每一次发送的大小，所以如果一个NALU的太大，就需要分成多个RTP包发送，如何分成多个RTP包，下面来好好讲一讲\n",
    "\n",
    "首先要明确，RTP包的格式是绝不会变的，永远多是`RTP头+RTP载荷`\n",
    "\n",
    "![rtp](../assets/rtp6.png)\n",
    "\n",
    "RTP头部是固定的，那么只能在RTP载荷中去添加额外信息来说明这个RTP包是表示同一个NALU\n",
    "\n",
    "如果是分片打包的话，那么在RTP载荷开始有两个字节的信息，然后再是NALU的内容\n",
    "\n",
    "![rtp](../assets/rtp7.png)\n",
    "\n",
    "- 第一个字节位FU Indicator，其格式如下\n",
    "\n",
    "![rtp](../assets/rtp8.png)\n",
    "\n",
    "    - 高三位：与NALU第一个字节的高三位相同\n",
    "    - Type:28，表示该RTP包一个分片，为什么是28？因为H.264的规范中定义的，此外还有许多其他Type，这里不详讲\n",
    "\n",
    "- 第二个字节位FU Header，其格式如下\n",
    "\n",
    "![rtp](../assets/rtp9.png)\n",
    "\n",
    "    - S：标记该分片打包的第一个RTP包\n",
    "    - E：比较该分片打包的最后一个RTP包\n",
    "    - Type：NALU的Type\n",
    "\n",
    "\n",
    "发送分片的部分关键代码示意：\n",
    "```c\n",
    "// 取原始nalu的第一个第一个字节\n",
    "naluType = frame[0];\n",
    "// RTP包的载荷第一字节：将优先级设为3 （&0x60），然后将类型置为28\n",
    "payload[0] = (naluType & 0x60) | 28;\n",
    "//RTP包的载荷第二字节：的类型与NALU一致\n",
    "payload[1] = naluType & 0x1F;\n",
    "//除此之外，是起始分片时，第二字节最高位置为1：\n",
    "payload[1] |= 0x80; // start\n",
    "// 是结束分片时，第二字节第7位置为1：\n",
    "rtpPacket->payload[1] |= 0x40; // end\n",
    "```\n",
    "## *结构体表示\n",
    "\n",
    "### RtpHeader\n",
    "\n",
    "```c\n",
    "/**\n",
    " * RtpHeader，普遍占用12个字节\n",
    " * \n",
    " * 由于 IP 协议采用大端序，这里需要转成小端序 (Java-Byte 是大端序，java 代码中可以不用转)，\n",
    " * 所以这里每一个字节内的各个属性跟标准 rtp 协议头刚好相反，\n",
    " * 并且在使用 \"大于1bit\" 的属性时需要将网络序转成字节序.\n",
    " */\n",
    "typedef struct rtp_header_t\n",
    "{\n",
    "  \t// 1byte (0)\n",
    "  \tunsigned int cc : 4;\t  \t/* CSRC count */\n",
    "  \tunsigned int x : 1;\t\t \t/* header extension flag */\n",
    "  \tunsigned int p : 1;\t\t  \t/* padding flag */\n",
    "  \tunsigned int version : 2; \t/* protocol version */\n",
    "  \n",
    "  \t// 1byte (1)\n",
    "  \tunsigned int pt : 7; \t\t/* payload type */\n",
    "  \tunsigned int m : 1;  \t\t/* marker bit */\n",
    "  \t\n",
    "  \t// 2bytes (2,3)\n",
    "  \tunsigned int seq : 16; \t\t/* sequence number */\n",
    "  \n",
    "  \t// 4bytes (4-7)\n",
    "  \tuint32_t ts;\t\t   \t\t/* timestamp */\n",
    "  \n",
    "  \t// 4bytes (8-11)\n",
    "  \tuint32_t ssrc;\t\t   \t\t/* synchronization source */\n",
    "  \n",
    "  \t// 4bytes csrc 可选位\n",
    "  \t// uint32_t csrc[1];        /* optional CSRC list */\n",
    "};\n",
    "```\n",
    "\n",
    "- 属性 m: 表示是否到一帧的末尾。\n",
    "  \n",
    "    java 中可以使用 `isFrameEnd = buf[1] & 0x80 == 0x80 `来判断。\n",
    "  `& 0x80`: 获取该 Byte 中第一个 bit 位. [ & 1000 0000 ]. `== 0x80`: 该 Byte 第一个 bit 值为1时，Byte值为 0x80 ([1000 0000]).\n",
    "\n",
    "- 属性 seq:\n",
    "\n",
    "  表示当前消息的序列号，在一定范围内每发出一个 RTP 包，seq 自增一次。\n",
    "  \n",
    "  java 中可以使用 `seq = (((int) buf[2] & 0xff) << 8) + ((int) buf[3] & 0xff)` 来获得其值。\n",
    "  \n",
    "### NaluHeader\n",
    "\n",
    "```c\n",
    "/**\n",
    " * NaluHeader，占用1个字节，在 RtpPayload 开头。\n",
    " * RTP 包含完整包时，RtpPayload = NaluHeader + NaluPayload.\n",
    " */\n",
    "typedef struct nalu_header_t\n",
    "{\n",
    "  \tunsigned int nalu_head_3 : 3;\t/* 前三位填充 nalu-head 的前三位 */\n",
    "  \tunsigned int nalu_type : 5;\t\t/* 后五位表示 nalu-type */\n",
    "};\n",
    "```\n",
    "- nalu_type说明:\n",
    "\n",
    "  表示 nal 单元的类型，1～12由H.264使用，24～31由其他应用使用，以下是具体定义。\n",
    "  \n",
    "```\n",
    "\t0     没有定义  \n",
    "    1-23  NAL单元  单个 NAL 单元包\n",
    "    1     不分区，非IDR图像的片\n",
    "    2     片分区A\n",
    "    3     片分区B\n",
    "    4     片分区C\n",
    "    5     IDR图像中的片\n",
    "    6     补充增强信息单元（SEI）\n",
    "    7     SPS\n",
    "    8     PPS\n",
    "    9     序列结束\n",
    "    10    序列结束\n",
    "    11    码流借宿\n",
    "    12    填充\n",
    "    13-23 保留  \n",
    "    \n",
    "    24    STAP-A   单一时间的组合包\n",
    "    25    STAP-B   单一时间的组合包\n",
    "    26    MTAP16   多个时间的组合包\n",
    "    27    MTAP24   多个时间的组合包\n",
    "    28    FU-A     分片的单元\n",
    "    29    FU-B     分片的单元\n",
    "    30-31 没有定义\n",
    "```"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### FuIndicator + FuHeader\n",
    "\n",
    "```c\n",
    "/**\n",
    " * FuIndicator + FuHeader. 各占一个字节，在 RtpHeader 之后。\n",
    " * NALU的长度超过 MTU 时，RTP 对其进行分片传输，称为 Fragmentation Unit(以下简称FU)。\n",
    " * RTP 包含切片包时，RtpPayload = FuIndicator + FuHeade + NaluPayload.\n",
    " */\n",
    "typedef struct fu_indicator_header_t\n",
    "{\n",
    "  \tunsigned int nalu_head_3 : 3;\t/* FuIndicator, 前三位填充 nalu-header 的前三位 */\n",
    "  \tunsigned int nalu_type : 5;\t\t/* FuIndicator, 后五位表示 nalu-type */\n",
    "  \t\n",
    "  \tunsigned int fu_flag : 3;\t\t/* FuHeader, 前三位表示 fu 的标志位. (0x80/0x40/0x00) */\n",
    "  \tunsigned int nalu_head_5 : 5;\t/* FuHeader, 后五位填充 nalu-header 的后五位. */\n",
    "};\n",
    "```\n",
    "\n",
    "- 属性 nalu_type:\n",
    "\n",
    "  占5个bit，用于确定是否为切片封装。\n",
    "\n",
    "  **如果候选值在 1-12 之间，则表示未切片，当前属性属于 NaluHeader.**\n",
    "  \n",
    "  **如果候选值在 28-29 之间，则表示被切片，当前属性属于 FuIndicator，且后面会追加一个字节表示 FuHeader。**\n",
    "\n",
    "  java 中可以使用 `isFU-A = buf[RTPHeader.len] & 0x1F == 0x1C` 判断是否属于切片包。\n",
    "  \n",
    "  `buf[RTPHeader.len]`: 取 RTP-Head 后的第一个 Byte( 即RTP-Payload开头）.\n",
    "  \n",
    "  `& 0x1F`: 获取后5个 bit 位。[ & 0001 1111 ]\n",
    "  \n",
    "  `== 0x1C`: FU-A 的值为 28\n",
    "\n",
    "\n",
    "- 属性 fu_flag:\n",
    "\n",
    "  **只有在确定为切片包时有效**，否则这个位置的字节已经属于 NaluPayload.\n",
    "  \n",
    "  占用3个bit， S | E | R，为 FU 的标志位，表示当前包为 FU 包的| 开头 | 结尾| 内容。\n",
    "\n",
    "  S- StartFlag: 第1个 bit 位，为1表示 NALU-Start，则 flag 值为 0x80 ([1000 0000]);\n",
    "  \n",
    "  E- EndFlag: 第2个 bit 位，为1表示 NALU-End，则 flag 值为 0x40 ([0100 0000]);\n",
    "  \n",
    "  R- RemainFlag: 第3个 bit 位，保留位，**恒为0**.\n",
    "  \n",
    "  java 中可以使用 `Fu_Flag = buf[RTPHeader.len+1] & 0xE0` 获得当前 flag 值。\n",
    "\n",
    "- **nalu_head 拼接**：\n",
    "\n",
    "  **单NALU打包时为单独字节，分片打包时被切割封装在 FuIndicator 的前3位和 FuHeader的后5位。**\n",
    "  \n",
    "  可以通过 `nalu_header = (fu_indicator & 0xe0) | (fu_header & 0x1f)` 获得其值。\n",
    "  **(候选值：0x67-SPS、0x68-PPS、0x66-SEI帧、0x65-IDR帧、0x61-P帧)**\n",
    " \n",
    "   此时 nalu_header 的后五位仍然表示 nalu-type，但是取值范围在1-12之间。\n",
    "   "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "不分片：\n",
    "- 完整 Nalu 包需要写入 NaluStarter + NaluHeader + NaluPayload.\n",
    "\n",
    "分片：\n",
    "- Fu包为 Nalu的起始位置，需要写入 NaluStarter + NaluHeader + NaluPayload.\n",
    "- Fu包为 Nalu的其他位置，只需要写入 NaluPayload.\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "```c\n",
    "#define RTP_HEADER_LEN 12\n",
    "#define NALU_STARTER_LEN 4 // [00 00 00 01] 的开始码\n",
    "#define NALU_HEADER_LEN 1\n",
    "#define FU_INDICATOR_LEN 1\n",
    "#define FU_HEADER_LEN 1\n",
    "\n",
    "int rtp_buffer_unpack(unsigned char *write_buf, int write_size)\n",
    "{\n",
    "   rtp_header_t *rtp_header = (rtp_header_t *)write_buf;\n",
    "   unsigned char *rtp_payload = write_buf + RTP_HEADER_LEN; // 地址偏移\n",
    "   uint8_t nalu_type = rtp_payload[0] & 0x1F; // NaluHeader的后5位 或 FuIndicator的后5位\n",
    "\n",
    "   if (nalu_type == NALUType_FU_A) // 0x1C\n",
    "   {\n",
    " \t\tuint8_t fua_type = rtp_payload[1] & 0xE0; // FuHeader 的前三位\n",
    " \t\tint header_len = RTP_HEADER_LEN + FU_INDICATOR_LEN + FU_HEADER_LEN;\n",
    " \t\tunsigned char *nalu_payload = write_buf + header_len; // 地址偏移\n",
    " \n",
    " \t\tif (fua_type == Fua_Start) // Fu包为 Nalu的起始位置，需要写入 NaluStarter + NaluHeader + NaluPayload.\n",
    " \t\t{\n",
    "   \t\t\tuint8_t nalu_header = (rtp_payload[0] & 0xE0) | (rtp_payload[1] & 0x1F); // FuIndicator 的前3位和 FuHeader的后5位\n",
    "   \n",
    "   \t\t\tint input_size = NALU_STARTER_LEN + NALU_HEADER_LEN + (write_size - header_len);\n",
    "   \t\t\tunsigned char *input_buf = Hover_MemAlloc(input_size);\n",
    "   \t\t\tmemset(input_buf, 0, input_size);\n",
    "   \t\t\tinput_buf[NALU_STARTER_LEN - 1] = 1; // NaluStarter - [00, 00, 00, 01]\n",
    "   \t\t\tmemcpy(input_buf + NALU_STARTER_LEN, &nalu_header, NALU_HEADER_LEN); // NaluHeader\n",
    "   \t\t\tmemcpy(input_buf + NALU_STARTER_LEN + NALU_HEADER_LEN, nalu_payload, write_size - header_len); // NaluPayload\n",
    "   \n",
    "   \t\t\treturn h264_buffer_input(input_buf, input_size);\n",
    " \t\t}\n",
    " \t\telse // Fu包为 Nalu的其他位置，只需要写入 NaluPayload.\n",
    " \t\t{\n",
    "   \t\t\tint input_size = write_size - header_len;\n",
    "   \t\t\tunsigned char *input_buf = Hover_MemAlloc(input_size);\n",
    "   \t\t\tmemset(input_buf, 0, input_size);\n",
    "   \t\t\tmemcpy(input_buf, nalu_payload, input_size); // NaluPayload\n",
    "   \n",
    "   \t\t\treturn h264_buffer_input(input_buf, input_size);\n",
    " \t\t}\n",
    "   }\n",
    "   else // 完整 Nalu 包需要写入 NaluStarter + NaluHeader + NaluPayload.\n",
    "   {\n",
    " \t\tint input_size = NALU_STARTER_LEN + (write_size - RTP_HEADER_LEN);\n",
    " \t\tunsigned char *input_buf = Hover_MemAlloc(input_size);\n",
    " \t\tmemset(input_buf, 0, input_size);\n",
    " \t\tinput_buf[NALU_STARTER_LEN - 1] = 1; // NaluStarter - [00, 00, 00, 01]\n",
    " \t\tmemcpy(input_buf + NALU_STARTER_LEN, rtp_payload, write_size - RTP_HEADER_LEN); // RtpPayload = NaluHeader + NaluPayload.\n",
    " \n",
    " \t\treturn h264_buffer_input(input_buf, input_size);\n",
    "   }\n",
    "}\n",
    "```"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "\n",
    "## H.264 RTP包的时间戳计算\n",
    "\n",
    "**RTP包的时间戳起始值是随机的**，可以由服务端的响应RTSP请求 的`PLAY`方法时，在响应头的RTP-Info字段中指定\n",
    "\n",
    "```http\n",
    "RTSP/1.0 200 OK \n",
    "CSeq: 5 \n",
    "Session: 1371694814 \n",
    "RTP-Info: url=rtsp://10.86.77.14:554/h264/ch1/sub/av_stream/trackID=1;seq=64758;rtptime=2794043652 \n",
    "```\n",
    "\n",
    "RTP包的时间戳增量怎么计算？\n",
    "\n",
    "假设时钟频率为90000，帧率为25\n",
    "\n",
    "频率为90000表示一秒用90000点来表示\n",
    "\n",
    "帧率为25，那么一帧就是1/25秒\n",
    "\n",
    "所以一帧有90000*(1/25)=3600个点来表示\n",
    "\n",
    "因此每一帧数据的时间增量为3600\n",
    "\n",
    "```\n",
    "rtpHeader.timestamp += 90000/fps\n",
    "sleep(1000*1000/fps)\n",
    "```\n",
    "\n",
    "## 组装RTP包中的分片NALU\n",
    "\n",
    "本人从海康的IP摄像头中抓取了部分报文，客户端使用RTP/AVP/TCP方式传输RTP数据，从发出PLAY请求后，从同一端口接收RTP数据包，每个RTP数据包包括TCP头部和RTP包，经过分析，其RTP载荷中的（I帧）IDR类型的NALU是会分片为几十个RTP包。（SPS、PPS、SEI类型的NALU一般不会出现分片)\n",
    "\n",
    "通过比较不同帧的RTP分片数据包，一般开始发送数据之前会先发送SPS、PPS、SEI等类型的包，然后IDR帧数据的第一个分片包的第二个字节FU Header最高字节是1，也就是起始标志，最后一个分片的结束标志是1，且RTP头部的Marker为置为1，标志一帧结束，接下来几个RTP包携带的NALU是帧的数据划分片段(两个I帧之间的P帧、B帧等）。\n",
    "\n",
    "## 解码流程\n",
    "\n",
    "先理解关键知识点，不知道有没有误导，H264 的帧是以 NAL 单元的单位来传送的，一个 NAL 单元包含一帧（I帧 或 P帧 或 B帧），这三种类型的帧可以百度。所谓的 NAL 单元就是去掉 SPS、PPS 的视频帧， I 帧是关键帧，所有的解析都需要靠它，两个 I 帧之间被称为视频序列，I 帧头部需要加入 SPS 和 PPS，这两个之间需要 0x00000001 来分割， 0x00 0x00 0x00 0x01 + SPS的 Base64 解码形式 + 0x00 0x00 0x00 0x01 + PPS 的解码形式 + 0x00 0x00 0x00 0x01 视频帧（IDR帧） 这样组成的一个 buffer，FFMPEG 的 H264 解码器才能成功解码。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "- 一般H264码流最开始的两个NALU是`SPS`和`PPS`，然后`SEI`可选，接下来NALU是`IDR`。\n",
    "\n",
    "- SPS、PPS、SEI这三种NALU不属于帧的范畴。\n",
    "\n",
    "```c\n",
    "typedef enum {\n",
    "\tNALU_TYPE_SLICE    = 1,\n",
    "\tNALU_TYPE_DPA      = 2,\n",
    "\tNALU_TYPE_DPB      = 3,\n",
    "\tNALU_TYPE_DPC      = 4,\n",
    "\tNALU_TYPE_IDR      = 5,\n",
    "\tNALU_TYPE_SEI      = 6,\n",
    "\tNALU_TYPE_SPS      = 7,\n",
    "\tNALU_TYPE_PPS      = 8,\n",
    "\tNALU_TYPE_AUD      = 9,\n",
    "\tNALU_TYPE_EOSEQ    = 10,\n",
    "\tNALU_TYPE_EOSTREAM = 11,\n",
    "\tNALU_TYPE_FILL     = 12,\n",
    "} NaluType;\n",
    "```"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "其中其中BasicUsageEnvironment、groupsock、liveMedia、UsageEnvironment、WindowsAudioInputDevice是基础类库，以静态库的形式存在，testProgs则主要存放一些测试代码，mediaServer则是服务器的主程序，以一个可执行文件形式存在。\n",
    "\n",
    "UsageEnvironment：UsageEnvironment和TaskScheduler类用于调度延迟事件、给异步读事件分配句柄、输出错误或警告消息。HashTable类定义了通用哈希表接口，该接口被源码的其他部分使用。这些类是抽象类，需要去继承并实现。\n",
    "\n",
    "groupsock：这个库的类封装了网络接口和套接字，需要注意的是，Groupsock封装了发送或接收主播报文的操作。\n",
    "\n",
    "liveMedia：这个库定义了以Medium类为根的树状层级类，封装了大量流媒体类型和编码。\n",
    "\n",
    "BasicUsageEnvironment：这个类是UsageEnvironment的一个实现类。\n",
    "testProgs：一些测试程序。\n",
    "\n",
    "WindowsAudioInputDevice：这个库是liveMedia中抽象类AudioInputDevice的实现，能在Windows上从输入设备读取PCM音频采样。\n",
    "\n",
    "mediaServer：服务器主程序。\n",
    "\n",
    "proxyServer：代理服务器，以一个可执行文件形式存在。\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {
    "code_folding": [
     0
    ]
   },
   "outputs": [],
   "source": [
    "# 以下数据从 wireshare 中截取复制的大量 RTP包的 载荷部分\n",
    "rtp_payload = ['674d001e9635416024d37010101400001c2000057e4010', '68ee3c80', '06e501b580',\n",
    "               '7c85b800017ac00001bfa41444daea2faa86e884d2f0c9b2061a1602e58ee73f6a195b500e30ed560611f8bf64ec57a5c4975f99c10094befc1b5ae00f9748ab9b47b2e8c6f96854cdd55b18e65d2371f8caa29a2ee9c36782b0b1dd4563d496865f5c5e4a7b114f1c47c35a656d9dda08290750de4de87d3d5b04375bebaaed87a4eb0d11b441e3157fd39a844d4f135b3b69e419905e9ca0c5b7f3d7179eb582cf7afa53f8e6e92aa352ec3e8249a9e7f430c2afe57cca2830e780bb98725107f21c0a17a6a9aa01ade09312fb3499a720ddbcefced02a610bb762314a1429c11f5477ee878e2656d783c3cc0c05c6bce6c4ee9e4876e260256590f2b39bc3cd78dc3c14fd3b96d9938aa45e2cb8bbd1e36fd6d4953d191de6be5c98ac87b5f15877583b9fac5c4700ee6e02bb65fac72c8e38e6f35b9591fb9f9879ad427e22311fc21886411bd6d93691f0365f159f498abe0646dea4b82c65cfdad97a702b0fe3eea8476f071ad00b829e027029655966188d3dcf14a210aba4b4d70ea27eb64599a643f4088819ee410944dfe73d6c715bd98e2b26efd7a7c80a1f97eff7f6c2e79e323bdaab826b71d469e94158690670d52e2c836c09ae7b97d40017194db572452897653afa0c380f0eab61c5af6a7e7d91aa0e12843ab03aa22ad388af5541548f041dbaa509212dd5ea2253d67ed6cd757378af0e734fecb5d9d2090e57485777e4dd6d8f879d60c7244ce2ed8cbcf964d1194c5e9570258a7af2991e9ef13af3cce9c665d4a6a9524355c9b4134ce43db539fc550437b999ae042de46d1837550f17c8dcaf8e43a6e9307957774fe090ce35badacc3a19363c4046df2c6ea3dbdbaebbdde5e0df462941c38b55984e9708585ea9f8deed9dd8e362b162fb8492c3c4962b4e78cf66680e78c2d84e25515110b2305f37bb8c9220f4e27d48ed6af4254ae5689f0da8df2d8d6210113607ffb17c54c35fd6ab6adfaa787cbf8219056e03045b49d93905c86c5915dae9511d330b6a6176c45ddf6b43f1cdbc154a3a80bfcb8e56b61d7b539e1b97610e43e02803822c4d858cc51129940d3c4c22e532bc9eeecbf99e7d000a0221beacc624fcf05ebf79d64466aa1769638df19773efed4a098dbc2fa9cb9ca3f80228d1bc25b9260c8e5ee9869dbcb8fa91cd1dff6cc5d02f7413acaf9a6f281295211c436fd65debf1c176d8a9d07a320326def59ab1448f112f86e00234323e764cea3f4ff6cc63db3d45b1627c75e9482eb00e14121d77cc778da79be69f402ecbc6b6d8902a33c090506223823b63b55353f5ee8341a19cab76d5e7251f1b5f600ddb7e5a4ff95bfcab2145380d5de4b963e09b0a088cb82221812571e916bf686d5a36d14121849382cbb327ad2cf4ace2f14145de0355a9fdfb321e875e4549f0db87827fcb9fc8342a6aa2f7d3ae5d6fde8188370867fb225a3fdd9c7ad9cb32368cea8245ea3fb219f1d8e15b7715dc7f33edf190c99f5b8cec14eb7980753d6324b8b61711d15f2d106dc5ddfe52a3d35082cad3aa623f89a3188841b7c4ef9e01b596dfc06adddc70eb9008f4a23ad53566f6d9d697bd5499d92d8765aef2a858d7169bd4150e32dfd128324a2a010b54458e708f8f2088175ef79abe678adcbc8fd0aeb71b3819e256c560772a2b211536f0807ee2ae8a4be5b62371c3e0dd6b6197e13560cf67ab0d43f327a0eb1e2da98094a9c9d5e4441fe294967dabd739ff897f26116da05e32f594383cd481f40649714cab0cfbe6fb987f6d1850ebbe5d8f50fc23f1fd5180f772022e394f1ed2def825a3d7756a1b5898b5c37d30919f0af98fc3426ac55e0e7d78e8d9cd1f9d2aa3e37398c7f16e4f874303aea6ecd261f9631a90b4b1002f1de4fe98c9caaa11c8b3e64907562acfc0c52ebcbca12aa99034612c7485665b38427ed6dc6cd1fa3819cc1b2dcf94f900c955aeb865fad6e19ead50a650258114d05ddeb30f48c7800009d00dc8ab4637cd',\n",
    "               '7c05fa56bbed0e1fe783dae1fdeb41f26d5cb29b458beeebd1bafa4e20ffb25d0c21540dab20d893f4c67a7910230a271de2d89211db25f75ba98cac6e2d47faa39516d3a146eb0438ed0c616f850f408ead0c60990560109053f8ac84ca5af59e9b0aa79f4e4c65dd254581c20027c82bf464a4b7998c44342446dd95fca7746c798e6dadc50c788cf930f481e08e743f124b50d66a7b27f868e6511d35c09841690e794b0b846cdcc77c96a06ea64bf5ca6f7e50503d93375cfe08bd41554f49285975d87abd9b1e3855bb3bb46bddc302064ae84843196e60c73fe779689fc47123f178d0e1fe4184ef96e68863f98bcf0bd1479b3fa63d343c0e27803da0f2b4ea2160fad552a84aac6a684a67f5d19230128fe9d9ccf025e8092299075badea4f1ef3be0491cf3f273a0786e1bc827057ee619b2254089a84af803bff4e2ee479d1f98b4f6b2ff74641174d61d4c8bef1e7f79a97ea1a2cb83499e0585ddfafe1ca017d144bce8df1afea630f7fdc1862cf5def8e8ec418341be6807d9d16db19d287ff953d016c4a95cffc0add5bf27f0f5eb160f04d467f6f38712d212f238ee103c8a4d10fd75332812e14a9ac72146b4ebbccb18824fb7d7e8aadc833dc14a325e215de2ff9c16d59f6ba5f81761f1f070171ad79cdc067998ccf1ed8e322ffba6fc39ebf4780ccf31c3f0db83aa04d9856e0a575f8872e0c49a52e55f0d410e20a8f7c13357394acf1b90ee38f604e580fb4f85f45f69410c0edf7eb180197b8c85d6c738be6b1e6150dfaa5ea937753d6366fa793791f9bd0e8a88158ab2b59e56c4b1e749aed724401b4aac54f4ddbf1cdd5ed18fa368859cc78fd444e0694cc412afe64c16a32736e785b7e9fbaf9fc46eb87064e9542ab7318a8cbe83e0f8c107559e34a7178a588b607c0188101093179a9ab5f26848552bd5984609cc8cac4a9a396983c2450eef676a1ca348e7a75b188b98ec3406a8f7bfcd5d90822a9a9d6c8a9c084574d5f8b8bd419550e6b2de512983b1d2da69fcd149cea7b94a772b0cbf0f0f97eba94bc15c44cbad52daea2ea6c61e3cd28ccb2756d0647edde0b6e1240586e7aa9fe581ed0384eb40484f1074d3c56aba2c1b3a2403c0301c97fc19e46d4ab4445b4e481a467949c30f31ea22302c8b2ad290950b953703e39d9a7f6edb82db60094db5c8c1e36131fdbe15136293db9c5a0be3298bf16cbbf5469eecd9bcbfd845c94b347d1618632f8f9fd6dd546ded66892391ecdd85e346bb1ee7e9caa5cfdab313549c20e2ab052d6f29f26903fb109ac9e0a194229ac9a6910ff93f2d73993a87b0211adc2b5c2942154cac40f0c5133966ae318c9ba382294eb7d9f855c3cf1eded1991624a948350d56208109604c73de68858ea2940cc1f5262884d1cc672021fcc7d94746feaa2ba932e8bb476c8d02d5ba3d6198e98c59ad4d527b6721457c458149caf1ecfa1dc143ed16eadb81e47036e6a176c26a81d45aad9245bac8aaf9e905226072ce362dd7053d67b82425844687e9bf7a4dc7ebb6e3666662f69caa032677451e3469c369b3c48d1daf7e8780685fb0b261106232e9c62db5cc9bc2d379ed669f8e806612bba401708754fae197be306860b1a82e12b422144e79260b5478d9f32b50ae97d954ddf3614eadb1233d811fc0d5c663b39deb29a562a31ec28074f5269f44ddc2e358a1bdb219c0430739b677d6f5477c15a07a0cadb8ccf6d554fdbfc958414f2f0e93cab3dc372b833f11672f22e6acdae6e1d0b665ccf8a547354e525d2828e0b7fa1654dfd3c02bb867f9b371225f04def080ef4624ae0c173472b2d4cddb2a7e3285c120df0bef1eb3599059cda75df613ad9ff80c2db3ee6a6173faa479b4ba16ac4a4473a5d9e53bb600a3db85de8f1270c1789899b5f255a4e9689eddab1ed8fb77a669a6ca883a99778d086191fbdd7dde47ddc23bf90173f14c065fd4b347d743c53d2edf81a0b97f5ef330e588c9ef4d7292d',\n",
    "               '7c0514a39c134b30dc55b380f056df1284ffb911bfd41cb7e3fe6975974795ab48fb38685f5e1b9ee94f6ce796f138761f37afaa79375af30e76dbcfc13b2d3e7b377b0dfe57f26d71c5baa5d48d42ba4a26f5967e35e77f67971a0734e9a0049c541bce500b97a5b8713b760f782c612c5d562854e23ef124e3d22445dc0a00621a24763f1eb2716cd52638d0897428d3795907db5b3243cc690f449d37eebd800900195cc5941d18ab37f2038ebc40eb49750f8dec0fbfe87fb1cee9b859226ed8b9921c3ca99fa026a429f57e3d7efb1645f3bb323ff054e207aae90881943d8244c4dc9fafbe7692093896ee4df6115279094a0372fe2c31459a8412e47906a04259f99eadabd2f348d6101ac0446ec89c8d149403d02d6a9c55552f796ab9296fe9d11061e782e8a56102bfa2689007404fbe6db787480da63b0495c8ab71927495cc9a8c482950560252b60e0ddf532acee330b51e05809e593deff736cc792b904fae73d39b31675dcf815f89492fe446d411c7304dda063d7a8ac963e2e76d0420df6b0feae39f16da390063d8bb4363f37a0b9142f38b5e0ed583f87c3b91cf012f1f4b571738404ddd02eefa1af3ca550a3b7e943b223c36c014cf09347bb37b29d33f8a0f8219db00ba0f6afc775579ceb9fa39387636065dbc2783fb837ede15c79124a12560a31e11f519f2569febbb54edd0d55e03d64254df6e34c542a46a7036c6f550d0570724be6ef472defb168782c808e344e01be13c8c4ad5c4a3df655b2d33a708e8c0a883da9d8b5dd621b32536c95cdef552a3a22322009385d95c519536e1a98e67b8056a714d8c373c45fad30326c010236099006616e9bcd2b8643d3710ec310054562ef8a75e141c0e58beee5e5dcc79213bc863da3b48210d3cefb0536c01569975112c79d60db51261fd63f1d7bcb939460040de479365a47f9d15d19930ba0a5868277245ee883d29fa774ef7ad51aa15da9f9943a4b239ed030d907efaf3e95ccfd83cc74a9f8a24d209a1e4e55ea3bab954b5f9d0ae6b273a54cb12a99415cc9806040dd47c246cef92b9643dbb0d84683ebe31860e823ae2af799df255d93da285ea106970163c69efcc182cc902411a10162b8d85c1839406c5c10482e49b960820b93175a529d42f6d3049aac58511c9edc576ad8515218337b55b2df52771c1be28695e4600d1f72d4062b486a5da18bc75b0b49240b4029c949d5f35be6cbe4096447018f343c469f340df2936d41d31ecf5c11550a1af5c62d57611c608a93524053eaa01329c7ddaa0c59b731dc752f7259ae77578b0464925c9bf5c56bee2fc508a66d8a51f78d560b78b91efce9b9ad43e0670cecaa6ebde98e66c8aa48c5a9e8899cb6d9af24f6c61a8f0d6702311127e908aca44e2fb3e906b7708a1598607e3b1ee6aea0d63cffc1a3fdd1d6a27e2e23f47aa19ea1d5f16702025fbc875fd3221687cbcbd9ebc67bbc4fc8f87b672a0ad115a72b598b4831268515ccf5f65ec3d5390884b271de770c56592f75b104e47de1e367e474da3dce6c4d1fc77d96678d38e02da3fd27b1fb2a6e52c317e0ec2c56418153105c5384199c94ced827f6919edcf381460fecab96abbf88e4ee593c9f745f08b87be9d247fa3f37deec059a3697bf8ba8356b409b7918563d45ebcf7554a19e7bbef049b58de1fc247294782bbcb20aceff52863fdf88f2d2491c592ea01c445e7da2b7ad31693b6376c518691d492f27dc307e65bd399db8fe5ca4b9515530d72d4f4c999d9581f0d32f442d74b97522c597a3e000635915b22e6e0aee6d631c6f1d3a11347a1330fffd92067754e4e5d4793ab5788375f02e2ffe44b06037ef69fe1eab68a89e6fd3680b6a486e50735ebb4bf7eb6a847f863882e7c6bed03d8fd54b56d3e0cad591f4a77c8a285668950d100b571a5201738d8e1b69e5d167dc6f06823d2160b8965cef7d13741b577c27b9dad12cb1a6edb5a5f89bfa62cc1aed38fcba2adb8',\n",
    "               '7c059427af63e757b6b9314c8aa34e992f501e87e4f8d894e8fc1e6958b4a76b282365a4d577c021f39ce33bc55cbb3ffe11b345b3a39be84cdb8685c9e69c5c3bef5a62b6cbaa7bb7355b6060fcd00e07c99c9c703ba27e3311faea0b5d75588cd76e9bf8fba589dd8ed89b10aeebb2173178c65c062db57b138268594b2ecb24d56cde583d21f53a5c158de10dc5253cfd4c80c7861df058bf76626d7fe28421cf62b91bc8a56ddf398c67981ea434a1f54008a5d07e4edcb4c1ac950002bd84cff5d390a7f62f16cc5bf63c4d952f5013597ee1e70e9377ee752aa46f94ade615439e74f52acbe0724a4c30089ab10b3e1cc0456ba4591a70774a9165cb4c3ccb4c064fbd533a4494a9202a6849a02cb65bddee99b6584291cd923da53cd898ab4706d2955df35a0a74eb0fae3faaf3c4e502683b6fa3104fe8a632bfc060edda9d62864949d6a8f93445a8a9006cf5f0bf0198eed1af128c1b486a5b51d6a889e22204fc041a7e84c789e29a58b6e64394c1330c60d4a7128a675babb9616116f75d0cc8e3f8a2feb4f4875752e407e7ee1f3acf5423bb0c091cc6587a8113251f62e5518d59e9037c43ac0cea940eb1c131efb28153ace9b852dfdbffddbf81c03ea11304019d8c95cdfba36c8d5c47b86e5980610fb116ce643f00b6cf4d6f788281d978f9a5e564bd3f49843364077fb15e77c0436895518aa2b92e7ca284dbfe83f298e2d9c0c93eabc6914acaa1a81cebfa0f63357252b5e3c15c7755f4ad42a61dc6b34ea5af12972dffc83819139f14af9a78febd73c7116d40f251072390c6f936fc6aa8d0dbab42ef88701d522f590c67407e2d004c9eaeae79bee0f003f1ad61808d60c485b8987eb6f867abfd29c5f82e80cec07c9e88a20e89df6dbe87617cd2eabbb0a929a5d9f88900cbbff8e0a5d4a01db367a91b40749f47914d174c91f98d5bb7a9dc4df7a27413e3a2a8ca2dc0fc5d0b54dd321ccdbd5ae4b0ab7eaf1ba1440dd83450112d7050726d502c526bde84400672f35bf58ccdc052b0ea13304e34fbd0462ec79209f7da0613da5b67a8f2b9ff6b4f41e5ade64bd8f3e4518236c41946a7bdaf9d8560fa573b36d705d4bdad566a6ac2c9820a720d8cd6c95dae6f534e47d4af052e4e74671ba262ddecdd42c644439bad470a864342302da5b5ca0c5b3eead729c6cb971cb23fc892328905baae39d5b9c2a2452764521a22057cd185616c4b8ae51efeb2345d05da7063d713b546c6d7ace4c4b37761aa4536c098ade20be02fe655f21b1ebdb1eca716d236a2577b0e9c84a833fb2b6de1f1cca370f4da7f68ab404e108fba1f434a14261ff22b2f3e0b2ffc14ffa99151e77d21e8c4ee6a6325be2a5042bb534fef72a4a47fef815371c033c5a0f7c54168398d7d5a82c0483e2d8dc38b03c35a57462c738344de71696508dc622f7d83ced58d65a4b39bed40f2a0ebd01bfa297d59c77d498bfbb6336f1cf608aec78a8feffb9824261635120942f76ebccfbd51b45b1d18d221c9b27f7d5c598a37c0c8f69fd0039edd14ea1666eb51087e02295b1921a1750cacee1e732147392cb3659165b9a564e201d1f92dfbe232dbff271869aa49bdb04e59bb55b76ca31d6b8299fd11ca2ae7c9dd69817d789166b600ef4fa063273a81a0be5fd4da7f4affd5d285c7f2c071bc3aea2d9c6fc536860d77c36d2d87afb67d7e1ddabdaae6a9167df32133d3e12aa87ce8544f1d0ec50194676abed942ea46d577e1157a83712a003d5e23e4f6fbb8a5c334610efa448e2ee8663482cd85ed0e3dc622bedf75bcc8d2e646bc6d76fb6d2fb077ba231db48ba557aa9d8b517ae7d699f8d4af367659304b55061e5c3e865338e533990715ad73ac8d759e225fef71b3d961c7a60facf2d47a8e05f99af39c18c76b4b369e95d513322ebcd2e7fa288f10af12ce3b0af43dfea537ed005205945f54355459da7f77ce1cbed5b0f8a3ceff22152f5811b3a04c688686599dc6ce',\n",
    "               '7c05cc449c3ced7eb063ee8fd8765a7043816a595bef353dd738066a5048852aff7cc8ca0051e551b8b78d74333cad10176da5561bb4499f06eb471381f9b04e5a623120c8fff4468dd77ea953dc1d2dd1185f10ce62d9fbd6a45ac1cdef5b0d950d3033ad4b56c8d305fc991530ea2bed8d13b6338739da6fa310b5fca866ef8848817d766510c07d65d7efe88b6ce2b13a89143d23342b97c82b834e13c3b860449d78b1d77ae2b50ec2365a85cd1a893aac592d56f9b2e14c4f276cf23388a360ee302a9d8b95e82f94f297697ff3693b56713b7160cfd13dc7c6afb978c9aa9c4b2d523e48c957d6dbd22c215ec4cd188c181740039b107e25c3c331c12fdf14bf54a72c3c186e7294ac207f1a3848f50087c72e98e5abc9bfcd8e38cbaf10d342276e8773f9c607a35f3e7681bcea1dbbde9d78423d13eee354732789ed849f597d3e51dcb0e7905c66d29c71f5ea3b7cd64a85ee040b0cb88a8cac3952ed44eb2cd746c84aeb4880dca7dcdb94e3aae7ba89ad7539e8690425cb0b7cbb45350c4c78a8c8445bd0383df9a69679f364c9f1931d7951f0717ef17e2ab7575f7290cac37ee1efd482d63821242415b614c44275adf1727c7ef1bac737842ead6e2524731ebebfa5b7a1de9eb0ef94a974daf7efcda794c78b59fc2b3b5e15d36c90be792b53b5a48631755f024f11f821b025fe0818d6e726666e5d4a4797fd4c8fe06036f8275cd93e245b0a504a2b20102d2ae117be5e5d8a280a23f87eebd5a7532ef36f1bbb2d717595a1b6963ecd43e7125732e0520da88cc36540f2442fe0cd2933095268b92335e26337235853d2b937c3643079fec2198ef88393d4c29f964ec1081b6cab75982aa59a5f76cfd50b51752e473e81e08265aed0fc95df91abe0efe0f02eb366db6a910280627e0307153389b00a0cafea78203b57c56b00d1739973bfe8627abbec62efcf245f115947322c21143fd3e14467d89a02ad19e99b522c3648f44ecddff30a7c41660826957ebdce506029df67d0fb4b38522561c24f771d175a04f3cc30f2a2489ffa2be91337466e45cab34e0454053ece5cce6e32d4e912a588841a6c6f82cb81e9f95b2d43eeb275f5e111cd4e3aa2641a311c4f7c3842d6d395a33a3d4b9e5c8be9be5850ec1d0643f3c8a953bfa99879a7427a60835d605646abd20c423791e96af876745197c8e714ba2a85f2a98abfe24d680977dc9af03e3774a9f0b9bc2bfbbd07cc42dd24437ddd06b6c2e8085bf54e7e751dcc6895a4b6a83d9d226177703b16c3cd8b79c60ed08685ad4bfbf41b069cb0dfde3135a65b5e28268bd997cef6f9fabf18be279a0f69ba89ced3b8651bc6ef5cf61951f3f8adeeab8e4d45f2a2762dc0e1902024163db87578d672d0830f026c92da8bfcfee31c1e4507a66eda28e7274775a7063b8bb923fdba0788d15b0c9a16dd678943d7b34c1b058a67490a5a3f66121eac7a1e486d4a192cf300418e0e16d2952a33f07c74e2132df3e51443c3f91f2582de6770df0dabe63862f56bbb0567aaafe42c53c9ff1cdb0b301ae44987ec77de74791e20ae394d67ce26ed060e7b75d506ea7a3ed7892211781b1b20cb60c3de3588cd74b076edb554672a08db589c77db80ddbcfac224926df35534c3f865c94be38019f286ee40f4ac6dab6133b25ee9f702e36e90a91e659a5241332d23bd3bad381db54ea81bb8c9d658e1ed36b4bdec4531fb80abf730456444550a871d17ed093c2fe7051642cfef03fa395c98ccab254ea2e4204970aef17bd8bfff422a479e594195b6884b62e80989645fcfe05fdf2be63382b889051257fb31bda0c42d2dfd8928f499bf9c119194c361bab794131ca670a99ea4e176f2f7d13a96a62de0ad8546d8aff6da6bfe80d13f56c4abb8154ae0d035b08c3437a3750bff81c44208aa3fcd4549d5351f115e051489a23009da38364626f8ddac88863ac543d51fa10127d3d57e894f236463115dca9146e709080026',\n",
    "               '7c059e22120de3ea0adfbab532163dd8b0cd984e53e851b88b6a02cd26a511b62c60515de58fc517325c185f3eb7d43946d70afd88351b76549a920c8424ca9007aca39e7d27d1e8ea647c4be2724f0ff452dd5966630c76f1c3c3e1a544e325bdc5343fec933db2383df72387be64b77b406573bc30872277ffbc91844ed4cd75b091684c4ab7c09468e2a931261153b0a5bd4ba817ffad6ece56abfe761aaac5292ec95323a51e464d89f6c4a4e6221d44390a0db01d897486fade919462eb8652fe56e4f70320045f46c9431088ebb4b1ce71a2dc1be61642e96c17058958fdbf77351049cf25ad39263f5b4b6e92443a03034731d00b2dea4674d3cc377fa3fad04a951884a8eebf25022a4df8467e5539148cf68c0955ec54164cbcb443f69f56f3922e2b83d8081d1ff9b25a09045577b297b83fa67048e3725bc2f98216d7232b3f75fefdd515a306c339252bc568b0298b3703f1d824537996626e55071451fbcf15b4c4704998da4e47b8a7759fb731e703df716611e8fa5fceef2851bfd20af03bdea53975a793e34d5e0c92fe6be5c29c0ffaa12dc2d26a0f90f1b4b4c7a1c86b1dbfd061700fefd433ffc0d6e70edbb706c8050b6a12c8f1c61bc06439e620eb217a5cb4723d130483ea4715ca2f3bac8b9c5214561a6c25dfbcd09002734116de4cc1ea99d092a5712bbc8503f9fc85d271efcc3b6f045de97b3e2c0523ea3ed8a726795896896a6f70f0c47273b1c8de223087faf4b639148d980d0f0cde5627e40be2a4417a61d8b1c9ca9730ad43616c75a316f8e81c385f7b607e84cb7b0a0a2c7e0f3915d59367a9b5505aeed753e7d7e7e1f6d9cee8a8698d0cf413a0553e522d01bd615ee0e45f20e0536379c6795f606ed76b05e083636b997f283613c4f0a850a44eb93ba117d1d7875384c272742cec57a423b69fc4fac26844a6409a80c7de949b90109dad4f6ace3d75229c9f77afc4ee17ccdf0709aa09b1c96b79fea45c2dec351d5fa0ee9e4c6097fc9e8fa330d832b7c4ef74827645f21f1ebacbcc094455f246a81f73abc5f341870d3e12fa78745b1633c8a73ac6d71ed12ab018a23e8a6a1f0a60fd41740e6952b7f3f2806d886c9dc6d14383ffe79bf4a315cc82cb62074c1ea26dd7059f3d9f43a84306b0386516b6aa2db18023575146fac3c2535e5f2246111decd84baae3d1f81729173b78fccaa23f152b3f2730d016823a63835bb2bb4c686761ebbcb68ae86a41b63f5cbef8e5ecd4633b4a6ead350ed601ac7dd1ac8201794e4af7fa0ead8f3a884c6b23021bd4a4def438625b8246424858b829ed6934859e08f6189522445bfcbcc56f700231ebd3f02457a58deb7c5710dce9221dd9c502efa21c4cd4a9cac6fd614ada0efb5bc2649411ebfaa71adec3c65f14e09a46e49dd7e24cfa4e7107af6cd2f5d59484b8af1f56e776124e38a5fb3b3f26299147aa93be44f9641d2639a7b43003a7fed819becb1052bfa6ac514392966ccad54a9b445e20cb4ecb01aabdc5f82f382ec819677deb4e3e90cf0cf5ca4e154cb55fb7ee780461fa96df02df736c4a684c74219f75d200bcf22caddec0061a71a1df55a0b2eeb599f8bf7a093574f4c766d704b91894b26b11dc02e74ea69b8da46c151f80fd86269c887b4982a4edd32e3ca2d3e929b75598289477c2e7f7a0f331f6d65288128bda7012620b32f2338e7424f4e6514d0871c03fe2c40c88b9f33e17610ee7d078c3590f82bb5ab39ee58f1a3a577d6ef76c1037bfff8d09df14c295f269a189aa644d419f9fa2582d0e08b0179bf30e7a35b5826b4acfc08a4793747120ab2d5af12ad02ccef761e46d855e6d995d5a52b2a07410b7f0752f02df2de551c43ef15e6e74801c6ab63d6e6fe92ae3cf9258c795f7d0eeabef571f7fb7947561c9f852aff1c1819bb4d86869f866a97ae2395921feba4822e03c73ddf8c79cd5f24a314acd62cea26460261775d42b9c4d3a0d1a35c671a40755a83d',\n",
    "               '7c055564a4e032c0ed46486caa0b327a721836326767a80973406fb679b0c1350ad401fa08b8536c117620cc015ab1fc2dcc81dc253ad105347bc7ea905a0924c732557a6aa9a38a94c4accaa31b3741052b948ec4ebda435280eb796fcd6803973841fddbf15cb9dede1a7479522ba0a3e78971de9a6400009045eb81ec8b9fcae1c720e7880d3cffe092fd3ab2e3748d4f155e877459cc4d6da6b2d8c88955aa9ea63cc657a1ff89fbfc37c0aa70d1904bf3c3c016998a75932840aa91207100bf2cde4dab6b51144832f30b7ae7d92d10977d09d961892dc20df97c3810a5b9e406e0969d854c329899bfdf7aec8f54505455f78fe57b5cb6c72554fccf4c63645d855374f4ad7d9d55c0ec056f39de9820e74076a2064b22d0022cf2b6aa24849f5380ec3b8cfeb642b8ed5ff011550cd161de50c9b6db6be6e7e6c17fa79575eb4629364a0124e19c871d716885171b0a970329949ba9e520d095d4240d49fadc22b76398ff9b331b3d6356ed740a641bb94b23e529e82003bb1eda48e98f0d0a010b0a896a447dc6bc70347c28231e7d38151bd89c1a2db3a7fa55fb7aa4c54c917700f2369079a31859524ef11d1ff7b93d7c2e21aea970b87ab09e803b9a85248121c94d3445cdc558ddac03d3c157bbf556342608572140b2f91a3bb164ae1390e015670a5fe6d368b08a09bc073ec77e6eda0066183365e7ea1b852088154b68613d91b3164771006765c6b5e20f0dedf6dd4497f0fdeaf4f8e25bc59d4cc8693f1fde2fe9dac3bcc7b08bb035280f09c74cbcc13a42e0b92cb3ead8755b95b2013f91e5be8e1b6630bf38e7ea91db8bc8912ef674ce8e7c38baace5cabdea953a7401e8d801d1b73339cd2779674816ed48fe2e894af1dfffaa5f7e48042f6aab334f124470591ecf96be41f5c9aec3114b48aa0de8d9aa6427e68c5297f9a5ff7a8c7fabb4d3c02ae1d5a80adf62aeec87aaf0c1d105729e6dfa532158c320f751c9787fb2886e79a244c7db638884f7f78159a88dca19b0ce33d8f30e85ea708a1d10f3c307c82403d8a6e3b35b59b724cdb127b71b34acf1bf4b7b04c9cc0544bc1fc669e08167928ac425555f2db3912557bc6ac453fb2360d89e62e060017332bbf9bee1536437746d0e241cec1a6fb64791a6918b293991ba3230189f732f42f43a512141486fc43dbfec449f381ee8880d799609ac6631aa6460369b01643c3f985d55ec5d163f33c4ba16d013acbb9d01dd6eb4c7661e7540bc527beb13a6b0c6f2db36b0f4c1ed58e4442f2adcea4feabe1198394d4b21af8220d796a03bc8eaf7b4bd626baffaa1312040747c9687cfb66e393585f08d511ee52c439c7eca4c01e11d8c0504fe0fb7c79cddd03c9f0ece01374d8401e342e2b7fe29f01cccbb6e3808dcc5a1c77120af74eec60c9c362bb7386669f134cc80762baa7f75445e3e784b55acdd8caf22f6c5e4456db556c66e6bb749e0ace0c8aff4271243436b324fb93a6960ce4aa9ee4f3443147990365372bd1adb39a29a0630c8503d888eea656157f64971fba62e3782b90f9497dac51243e6e547fc026fb0a8c7ac121d0baf1de415c489bc89ccbb04f42e54f0097390aac9e46b4f34889495e71ca6c3dd0cf40a221473cf67e037a4e72b46174a2f61c133f87527caebb4788808edaae930e2b5719d098f4c2a9984f2cda10c9ed36e7a9fae61ff4df7147d5bc858e1f16b2845c570bb35cd7627aac959fe143ae635c745d4db5dff3c1d26d8a0040e54105ba36db2a4e9aea008542b0c50ca39a113a66f1c25ebda60869427d7682551da3cdb495c6d80d323a5046a055e51b6cba97d1922ff34eaf647cd18aa181578ace852b1fcb4ddf38588f1399d2535a82992471c7f3b72d79eacdbac38dc6c56f90b9d13dc549e82c3bf3d84bfb3aac01f18d0bab0d39e0617d59b1256bff19785452b2670696a098f80fc39424a18cec2acc141490fedc2818556d187e31f9def8b7d6bbcf0d8cd41',\n",
    "               \"7c052fa9e1f737b5562ea0bc1820b887344fa14104fe9aff3770f1e5ef233c0ebcf16e651fe8580def10d13fb3cd1616d1b5849ee5349944d0c815f14c868285d6b8e88fb24cf25e91be0e25e8414fa9a1775f9300f903eae97812f543b031a6bac1c76efe07038850411b5e00051935a5e606efdd865e732e97d25ed8126991f1a76f0b1cff31ea8a6ad362942b73af8a98508109d48cb5e0b371a4f7dce9d398fbff97a0a327fb7550045117f5166e56e2c0419a4c7ef121852a022f6f363cfdd066a844e1c7f9defcbe04e7d4085475254db1470025e083880775bc734bc75f3dea96602e257c6c9d966cc2b8f66974304cdbbc587f97eb85cedd1fcf322d5c21f18310ff62c21e34938e74de40c3c45c449e7f2c1a562a2b46ff8a887fdfa089d88705478188108ab376bf6329e78e664d02be389f5c26e5e48eedfcc4d4dc7fa6ffba63124f73e150dd04425a9a4d5b5e8c00d2caf127fedfec44c392c4bb9d9c29eacb6f46923b6b16f419b867fb9e2101d57cf3f7b0ca98119966de838ebfb8d103995cf6712c530884875d3342d5f024fcd800b9484071bd903133e3f0f513f17d04b68d8c864713f0ab0386ab52d9805387d40ee2c734a5e212db095527c34b78707654f03ea9a638aa24099244d50e3ce11fef29c01d0efa29d8f4b3e7759ede651fbed2ebc232b46f5bf3a81a6683e882dacbccc5ab0251a654c390f54cf2945861fdd8b1241a0ebe67da6881491cdd3b29a1cf087ad0db9454298f367e07636a8df5157aad74d2ecd42f9136f2071c5d605f361f0ff1959e4f55a773442a392d421b48ef7a6fc36e6e5fd408fe9c922f202113617007d3ef3d4ed997772c62c840e6330c041195da4c94e60410639be2cb8e0fea09b3b681a1ac1576ce85bf1fb60b5151f889835319cfa4166e86ff6f6f127e8688a332f6ec3293a9aceaa032135679801665cd7af39ab6a253c2505350887121fcc58415faf4e682176b2c1d220d62814b3764da7dc19db601ea122059c396dc952d377cf0ae78122b363525c6f25c469b3e013367c1bf1689f6299ab9883bb58cb847bbaa3a62ae93f1325bd0273de694ccc213df7c4fa9bf4fea3f21b3d011e7b64bdd04d3e49c35307c148e51f81f075adbe8f1a3a4145f008d9f776f32ad4413697dc444af3a062c5180ec594708e5b4bcb57c45f7e375b295b881ba89c3104dddc369253dde63d98337729267229dfc87e5aadf0d0d300c8af421a29bf9660fcc5cff1d306b66b96f62331c49c3f44bae8502855c2618b5591b4837ee848f0eb485efbfc78b6c999f649d8266aff5977a37a9df202b9c358a00da448f68974f049892843f76211926e886ef22842e9d84a8acea831b0dc86dac324329a2f5850c4e36abe99495d0dadc7950a3aac7ab07088dfc2f960e2d0d21c91f47f69873aaa450fa4cf7be7871c7893d1f0f56dbd160925c3e64bf188847aced7e4caea7472d5289c3a8ef4ca01682368c62305030cc8c405693f9ca661c8898ca29d1c97e4708798df262210b7e7dba3e5414012dcf49fd85c826fb1cd0cdf66ae137b9689df4f213950fc72e7dbccb827dd862a296d90f0c5220ca56d401a1e54df4adfcd490ffbc72b845367a8d59fda6ab1efad5c5b10d4133e0696dfdac051396738c5c2e20031a6567f993af1041b86efbccf29884d7774fb88d2c7e53566e5a6999b0bc48099fac92f777b36db0349fca0c193e165616a7e911bc82702060a66d2833e274d9f05716884be6d1773dcbd7109791a90f8718131e9dd8d439797c47274a3deb4a96d9dd4d9a774dbac6bcc5c0fec5eeaac2c6b78c8840ebdfce46253fe0b5ec179813790a6d05ca9faa97cab4e919eec5c8c34b6ae27bbf0cb3b64797a1ec1fb8b68fd2c79ca93d15d087d27688d1531b032a34d8f145bb2c465a63d6cf9e3b18c6cdb4945421411fd1d9d55ea4e8332ca3fa8173c4c816a5906d380140ca3b518a90c38a79a03d0532cc064ccca40f1d4575af\",\n",
    "               '7c05e735036859db8c67403f5b5c9aa109f6a9670bec14679571aa72010be419dbb3b91a8ebf3ce65639d573eb4c9b1f53d4178b990b0b0dcae1e8c801d301b8c2796930b0492ee0d6e7dec67949f56fd20a390a93f6a257b1ac16c73872f0e935a7f21a394161bbcfac1e1bd6af219ee54840fb8634d8bb0bcc7914cedd719083d70717f8a56e865b3c26cc12b73ea5e26b6a50907cbd61ff6b36bc6ce38d36b427445ffc437b7f277118210dd25239faf308f3ebeee51156041a937c38a67ee95e893aa9542432e85a5307851db80554038b12ec5af7f588930e208a2001316d48573b5266e7b0c0d91eba4c6ccc63fd83eea5d4bc6b38f21802ab68ffa41c845089e25d571c01836562c8a5e4dec7c02b376de65ac0bfb1a16a4f5c3b346ce33cf4e09d5c631915255215d45470e5a64f9aeec11cbdd01a3e1beb174357a9e21e9ecd8de75d1575cf38fc69482b5b0afbb55f5efcf57027864e545d0b4f6545dd204367dbbc0183065e38b2cc58377116770002cf3060a2f5bca3367ba1ffec70170825dcc1d85c7f15e3c03c846ef683eeb35eaa41bcd04aaf6f2bd6eae08dce1c10c1db9ef17c1df68201f5e21b28604c795902bcc34265430daed16ccd998874a876dcf69dc13bf3f6a66d709372a823a204072eadac90500864ea7d79ee5e9df8107a803bfa35860e5a50fc69dd54e240e719d8ce8688ee1abe1c47708878e43ff197bfc873bdc478b6e1113dbd3cc878dc845ca92dd358c3556c05db4ec0538795887226888d626518c2965a8d1140bc7ff0b73a1d3146cf0bef1040ec8259ec5fb0a425c34dd13ed0c48a0906c2423d27876cf436b4febb2630e1efc489920a89a7eeffebe1e5d4902a3684aff0bdcfc47dfe9d1c6f531ee74c4a2ff86009ab2d9ea5725cfe70fe30708be0d40e30ae731db490ad58a83b686b33457cff821d02e1c1fb7919d0df3246e78d37c4882fd3e32a6b48c76155602d12e5c66472eb8f7d76b52b282b4e9d1ef9721a9a195b0506d44b603a5ff0a004f0a58a1a7a49960fab4d19df469d12595531c4e531ea651ed6cafade16a99b5d0bd9d170e9c621b4160df3dc872ffe43a1c1cf13b04577b284d4a84010c47c876b647e26d82c4b30ad0eb01051e297b57420a82155e3179d1491aa756e1ae596f7eff12b7d5c7f05a906b52cbb91aae200fe81bfb718c737f3bfad1ca0b21da3c1c32e83984319862699f8b60525cd39e7101cad6e8feb4f8dddb372305d6f732ad713010a0399de1d073d801a5340746ffc1575f74c87b681eda3caf2f68cb85e5b12d819a3e86822ffd000adfdf2e327c3ac22b33f12caf20aeb84d28969f47b6fbf79c24e099cbb959e018cfd4632d84647af29c529393aedc6582d6ddca1e1e05109fe11736e3afab9390cdc0ab95e80e639ae2a9cfea34880316559548252d58ff3df96a4eae9913ea7965581c4a83001e3b0b38ba666d66c94046f902d7ee9daae5c4bba88a475f751687020e4b69c62329a74928bd9dc9b8258b76012dbffb04f0501bac38a304650725cefe2d8a1112ba73fef1fd38b98b44555533efb57aa7dfb4dc609208d1f761e3d13f6d302ef48e037ae2aba4cf9e861204c092862ba003cd700d8f9a4c8ec29e12ede823ebe922659e0707a5e2fea70e3b7a416e1c5f673a9fd127555227bc3e6faf548ca9e82b083bce00f44896cafec0e7f953b25a28264a757bfd211d5b521e430447be07f856d51e74ec32f1ab2ea9b0bf8f98d90cdedee58c08d7a752c93ebed08c2b622d15b30c2de27a1fe8afe769fe4229174c4a29b64d631d021b2f7964c2e63ed767cad857570995728a5ece74958a3e81d98bfac3da51d940342e2ce0646f5144f59b3830929e6f1a1909448fb812bd90e7737eabf26503f9628ecdeba3da8614bd5c89a7ea4ea6c5425c07708e9f09dccfae4292fe5de9be04b369e820a48c9d1b060a856897a95f60c147e392a7a006a720eae16976048e5de1655b9e9720959236c',\n",
    "               '7c056864831b731f1eafcfa7159c93ecdfd62a0077fef15209ba7b82b2ea04424828da50f1c56572cbed3b86c6f9b1fdfcd88be097435f4a5822788f536bf5ecc7ad2ab236e2ff97365d067e46434ab84c352cbdb1424144b670c9a5715c484646ee7847c3d4256d1d219161b19bf728c3f24094b302ed7dced8cdc5917ef455c03be5e7e72f0e2a4ac99be9ff81b4284eb58c607ae11bc535095d9d341608fe7119c56e851ff3c586ff341fec3e966a87da8f043c75f7193d859f2bd451bf64c8ff470e19b0527022433e569665485a6110c1b44856151cbc779aeeb26cc830bb43e478faa57986a261903d6d5fa0e6d33fd4cfb97d27f53a3aa4aa2d518047b802cfde6425381cfcb8e669764bf6fb7593f3eea48378c471a54c6630f4a7bc0ed3d62468408a73a6ba6a1f22b6eba6237fb972d272e274e9d73a2afd1d023c7fa1a021f97d233252d6488817761ae29d21d49f3e98a0140fedfec35d1def1883e186b94d143b896541c1ac8563244a03ecfd6863ef4389a24cd76145ec6e922ce8b9ef29040be16a3119cdabe8333957718b9d12964bf8cdbd98da013d8b944e09fba5400454244f5acf783cdeb688ecbc4313a37248fcecfa6f11bad32f801c01c3069702dc0d6949170c7c2c0da4c3eb692de523e2830870a7be9673290b099cadc6f4e31323945793613517e49c152562eddf62cee44c84b505e53aa5ad6abd8878d05bab920e7d659cc885e536e8bc48d311f09b469b387dcf5e53158a14d4da7f0fe1666a2ec9977be3a63cc0194a6716a3de39441e567e8e22927005b1a900e112df64b05d40693c51e9b7f36cbf92809d02259a6e3bc5b338f5a38824094fdea2c6e8768addcde8805cafc6f0f06e2ec175204a5aa25cda1685b3134076cb33d15d162d3218b716a94fd6d9c956d195156372ff51b55e3b2edd90b436154e248b7e2e027417433c300d911e02a65ff9bd58ab42c71757d1d2dafaeea54921159f4b75e3174a9e15c25bf88f2c79529ce4eb041c9734e0cf87ae4da8c55f1088b2035747c46ab3923c10ca93333e35c56fa0fc96fb571d183ca356fc50d035ad0d0fc59a8caeeaa9cc78b1a5e0c3c82716484a134da07bd39275f45535a15701e1ea20b6deff4621d30506273ed4eab6965eb2a0bbbd1f930eeb44ed5734c43965669ce9fdeed23d3087be825b18460c96a0abf223e6916fbaf127c7990728611fd9bf2dbfd6615b6b7f6f1317f8e48f79ce544c65a50d9976639f28f40b76e6e28729eeb64895e6d93bec10b7c708587b61d7645ee62a32beb1f0d4d0ed013d23912512633b9cd02addcc1535e4eb8222a604ebbac189bbbc37797774d812c0e073c57b8017b828b9317450bc3884a9041a08fb2ff19864266717e1f5990076626873e00982f8062d0412156b93f0afd0dc40ccd72f0bcd0bd20430a77a6c8e7d3a6d4ffe74ba11274b6b2162da3d4bff10b6134fef0cdb6dc62adbc3dd469c099f287f5f5cb4ffe670c748b5bac93b6d164c1ba1a17f29f9802e00b0af1f2481e0a4b8e162b1af0bf12fddcc4e10fb87e21ad2bb219592e86873637cae0d43535b54fb85d7669500807cc50432d707de842dd6a7294b9431babb454439cac0a08f9a344e2cb35ac2fcdc9e9e266525aa82ff8d5265031cee2138bf31ac1df2d1d4be45510b9c7dbcc935c2eacc27d2f9bb12be73842e1834ef4cbd41c3c3481e7cf183ee00abfa58493817011058c1bcfb5171668a866bf47e9db1e10ccf2bff22367e17e959ef65ba7f7e7c7228e66cabd73bb79dac23f031e01c3205834b0e7aab803c2b0aff39ba2cd033e27673757cefabb8cfa0a9f9818cf08e70ff5540f7061e5b0474b86dbd30a0f664f611d91b7b14f49792b9fe2e6aeb5741519cc53ded35fa44262694f66950685800e3b1ca57f15dcf8ff484030e7e0052cb83c302aad9f9da7de9f0940be70ced091f434e8c6f1124a8e31513fcbb1e30a492de7cb24f8f2cebf51b9dc58d895f2ede',\n",
    "               '7c05d83758f3306d909d8cbf52024f6250010563a0d59c4f2fdde42520ea83ab147cb73b638ca95f92bc139ebcf8566de46ecd439f8842cae760ddf70f59446eb5f89b51b39be9adb94285ea7cc24b6346005b211bc9dad0b3992e661f14559322b7457062e28949af6014f34d55d61c4c85261e2fd9724dac69b533bd661bcdc5a2ae2fa23dedb4347f77aa8b933315214ab51f96306bf84d53575a7edbf8378662d4400cef4f38b67faa5b674a08e0c69c2111aabe0d5c280d6d1c6bddfbe58e49dbc905219d0b14219eecb57fd91eaf9c0575f64c20a944c829fbfbb3ff6d7a308f365e3aca16e932f41d07a773a01a4c1d9f9a3088770d5b84d2b5cc60f5825c2ebc30fcf6620ca2ec24d6777bbbd93df08d92f3493390524ba2863034d92c532063da08e2e9b5ddc18da42bca738ab98ad226571a82bb68387b6da73c0704b671ec00f8b04919abca00b7bdeeb871fa5b94976081be01e5a896e67bf6bf1452eb6b920a5d3620a850438fca7de4917f7956edff7cc4317387dd2a08cfda25427db389a12fa87b3d334e4aeec7a0bf7a06e1eb4371c573a0045021383629309d550cb2ff3e394e3dcaea4094284135bba12c3dd9b507250c16f002ed6e98f9e8d16c1c3d2303695e365417c731d15c25fdb473137a9b7ce4972e1c2f1013ee742251952df6e2ead436ee0ba308b18c5838f4456f037cbd5ec9219ced368f11517289f598f1e56a1462a2471bb17ee9b285598fa5cd8ad1ee172c350deca59faf4394b97bcc7d5dec8a4193976ca42df90aa072c690e1c8c3208222ee8d324c584c8ed36027f686bf52bda4b4ed0b26457cdf15fda59f45fcdb2ad9b60f5e8f732bef0f608c65485b4b4f8e9824c6a74a1352b500aa0584bf9bff6aecd567463f15848c9aba2dbe627050297aaa75480487caf5f9e872504c2145c65a6f9cdd72dc1ba955070205528dd26c2361c610d96020fc3d630b9b72d19d35dcd5bd7c84e4a5dafa370beeed0b298dbeedaa77fb5d18656f0c465973d9c3d54047221eb3341bd0c940f83e0eed60e28cd2c8ca928184498509c970b4a699e0ed6c810b062615b7d26fe65e07a345cbf700e2105ad32db2d1c90a79958757e2a3919ace3a445a8a617df639ccba569b3159142ac980c6e1300fe55ce12bc6bce089c6f75d2a5c1a06b9dc06cf6d08fc5f378a8e623477b97654d73e899e9e1fcebdd17e8ee28f4dda6500fbd93268581caed03d70a1385f064e1ba3675e590a39b1c11791658aac40c081c22ab4c91c9e108b7aedbac92881041b6d321494c1f3b9d40bd81e70d7b576612c20e16f3f8650a01833bcc9b9088eb96e2064610fbec136fc59ed299fa5aba3437170cbbb0232a8a93263837acde6ff40dd65a0be592d8a4189d046185fbe26082b9fdf812a056fe42d26a885d5ff3a9c93804a07cdb1a894b213a9a6d1030453321df0c4edb0df6f0d51e2e63073ab7febeb1982d20068aa910c7e2a95ae4473d1e9df5dd30424e93dc18974eea27cf26729dca29ab68dd477b57ed0dfaa662469c2781228ce9857bd6b1622829fd2354c57b9ec1bd66ab54d442226e6409de298ce8c549273fdc1ce43256af859a2b0dbdf01ef2a7838fd26bdd937983f5fd6c78a61090b8c586571c9e1ce743924a1aabe6b240b0b15ff90876e299914fd20e45a57c586d0dcd3ca9a1fe3ee4785da12be98b4ed27537f326f431d1a1e79591974479293560677dbb68cf425614ac679426d9e3d905654d85be2c94ddc445734340885d3431408fd8ea615050c6ce3d3d3ac39636be78caa85b521f01ba541f58df3e3c388f83f3a8651776a32ed06ef23235d3db7a594b36434ccf08d93687ae6c05a7dbe9b427fab41dabfad2680c017b59810f66be40114970d1c09ad9d3eef24cf0db922a6fde35399425e10740d52e72c08bf6549292d23000a848acf8465e5b5baa8de201b24eff79492ebeb165a7a98e223cc8b25f320e24893e4bb8908d226cfe5e59c5e798a',\n",
    "               '7c056748730594ff80651f4d1f00f6bbb59a97dea0039384f5d118158c2ad0291089f66009a39b27b8904b9696c944387c87093a35a3db0213b6846b55c9644fa4d38e32801bf9f9602102849f3257e28be2fbb634961ca0fb280ed92be79d4f965e5a61bcd9e93fa5350146915b4e57216d71116b9bd9ea7205dbdabeb261425b8d48a77168eeca86fabd74aa2d3ab000a1e72a248e38e1189adb02bb2be3c01eee8d00ab9b4b73710e8f1b11915c09f1652e190568ca23b0facea6464741f87bb2e5f8430bc141ce622f1a710c08618d7bed2ab164cf46c41ad2710c6b9185481aea8fb8932f7e6a0fa2f49d822851a7a4d95c019277079b3835e4046b24e0c3542d1b4d7d05cb5b4ff4c399b816622a23c834f776cd4c2acbe7b94633727c9649c640ae57505dde963437cd072e72619d299de09cbd452a496379f730d61b45d16b83d663431f51f8fe124aa4f1d2c54b500700014a83227ebf2b8e30add4519934f738c6441fd25444966a9e37b272e7157f864719bcea19a1ed832835e43c5b019ce66ef7f6133c993deeaab94d2a953b96bb1291914d8bc79e75d421a2d7d1b0f5bc6d383cd65d32ce079269abee063fab62c08765ec7cedf9f908aee49adbf7d6afabee67438bd427c363e445d9fc1094f322bf78bcda0aa7207810289adb83127ea810055deee8e51793afa888634b91e38fee4fd4b7f3a97c6586256bd127dbfd93e19e9191a03a2a844676ec4dfb5bd793b8f0bc222d224c963eebd8599c2a27c6bcb0d803b7829918f557292c320ce726f9744ffcd6de472a7dfe1b0f11eccbfd184b8698708ee023413b47c2cc56d7572a2d6797bead085b7baeb49b5093c06dbfc6f991c3b7d42306dc7ab24cbb42bcb020bb54dbbef8e41176feb205601fcb651156724d10f16b250d4b197e1a3cd92ef7eb647f6c77d2cccf7f713c1080cb5d2c48a174a371b8a6925e693fad29f12461289dd6482a36737e5508144b6ddd32563e368b08cb3a26a9364f34b02d58bd3421be27cb04ac365fcd67640d0d75efedf0e9f9952f545f7757a3f34a3b8fc048f41c38354a37efb5a36ade1d1430701e0706dafa4c0212ae582feb97327cf121280ede79eb8ba31ee64df151dfea52e09920769c199fb1de51f0ec820b34453fd45d6afffbacaa5f8e188936be1fe5fd66c4751b0246b762240cf92cabd12da927e1d6c5aa4c1dac47d8e024ab3129b4b882e7b76db34d7cdaa9a1da5b66967b881a01827fdef49a341a788f56ee27080f374ec0c3dc8ea1c2f34363861ef67b6ae0162555898a63121b2bb02c99c2d39b456efd497af65ca464b12595d1e67d067dbf40eb9d18418712eb41adcd86f8aa57ff2039125c946c3487e343c63407164c78e94cb1130df039dcdc18c757abf582ac1e49dba8bbcc499816230d8969155e82e20b590b3c49eb5a9f0c878606d36d9bca1fd433481163db92ff1b21c66017001a576f38b6ea4a0934396896dab4655e8941ae6cebe41cc38722c0ee70eaee427d31e64728cbe662fea13482d5a5fb898708fb8fa1c9b6a1f7bf0dc4d3ff2d8d9f4f1dfff1eea669e9993065ac9d80ab235337b919fd4bccad630b8d7ca8314382124ef6fd806f64241e87faaba15c4974a767366e8ba7e47930d2a1a5884253105ddcff44ab9883b6c917f293279c195b88d6426c34700c89996dcb4411754476c3ce0f203b0ce97712cc5d2bf08bf0b9f537b11a08cdb499fd599b5dc751893f30e6580aff5fc17b99b0f41b3157cd67cc7da2caceb409e5a73cc8907568dda9208608d525e7a83a3a2c5ee7601bd376f30eb66a4d6eaf646c5a18fa1666ba299771bf8cd67b0b30ecc2e88c2fda78800258327959a36cb4272fdf131ba720d630aeaffd00342c3d66e5cafad15080aaaadbeeb221444775f94f80843e8904ba20be5545f3bd5b544e269b00c8b0e55185e93046e0f45b615d5b225f87e9b1da4f3d69553d2885fdf707db50238823bff8d0c085168753ce',\n",
    "               '7c058070a483dbb942a1a899a6d43bf70535907321e1b9caf3aa59ad48706548cbe06cb00db5647e1300e77e7c073f724804f80175fc6f969c5e0b73b9402a5867ea9c13cee49cc61fa40fb2269b7d00e28037a5f8907cea7d86efdd4a5705c385eb1756c8816dac77846ee7e4b997f01e04ed009351f6aef5808742041fe7dac5bcaca66e1c8df5d36b3a636dc9543190d6446cc27912b29b27874ce57df6d03aab6c8e980f8d3881a9b828eecc6da6194099fb9549cdba334879d6eb27991bf55dabe1fe59eb2fba615930e1b1ca334580ab10ef5e41bdbcd5442c13fc7ac2bf9276fdd1e2ed8d234cd3928c1dd2bf7b6ea73dffbf0970f0a76a14217ec6cfc6af3875e878da1f1dee6cd98efa0154d3fb09e38428bfb1effeb8c44abec800972b23cf55514c0c9e94292255b0adbb56699923b6e0f0cb9f481d11c197e64864dcfe9f8aa30c488210fa55ad53d356e6cc7f792d503f088b0ad040deb88a24cb1408241743a10ea7b537ea93bbcbdf60a405a5d5273877642527e013019429bcd872a33d2d69a7438229f9c7843e9eaff15685b4e33be22c5adfa461b02b5d873a75d05c3b28f5de3a7cdcee0450c39cbdbd3a89dae9e47275926de1ce18f405740664d7ea3949089bd72a0963b0bd81692bc8316cacf22ed4531937ef7c939b2b66095720392e1400b0ecb1b68d49de06e1724675114f5c79ffef892ce470dd4dadff1303d44163bf9f22967b1fec0db38c0013a29189cd26421dbe9bfb8c53a52d1b92fce1640df5089ebe817756b8d1470631c2fcd9501e26fde81ecfbeed4028cf63c48707799bef16afd8cad0cf911f8b402798876c2567a231f5c5329be0ef62b416e2977430c48bf88c3bf9c2ae7d3257d2643a53c191e214ed924abff3d3befb38a1afedea2f0243cb613beffc28d59bde139f71775f96ff07d86ea4f657a0f5fc402c71fbb0d2e413750a46545d1325215835438c1d3c2dd9de6230ca2890b98243708e5c8316d0450c3d870996f7b858ac1d1ae2821668cf81a271a1bc75789e7f2a6c15d8e7b288ec4bfb5229774c3d6bbc029d980897e2f8509a92e6dd1ef1d8a09dc91fa233d2096f83b07917723e3a34d542ce50e4d856553528fe493d09db0c42e24dff880abbc574e517cbfd985d0b6230d5ae150e7f8c216170730d48ad5491820437574677e09832b623fb0a34a2d3121356590605be0eab3505be6a0ff2b52ada00ae211549266ee9cbfd9e794d67af2dc2322b0b43207e01314e6737e76b8d4ca3e5b702cbfac7035feaffa51583ef30f7a92662649c56091ad7f5c1e84c6bfc937d13865694bab23fa02464ce3bca36135c165d50eb0da38abc7c26f7ea12c3514c7ef3082a211797496e8f7fc9f850a24040f9a0ef85f9b2098fb8313128f876fc5631379d3a91f29b86ad8786319adf5fe117268ea70f356cc2b52d334377ab965e25be59ac1b089fa2ae687de634836bb4381054358537b0604730ebabba907e6ce021d352529ed351f5697e5564948bc9df5ad11eb9e61c9c27b8255f9a17a2a4149ae99573d43cd153c29ab366004b482fcf1155ab038f3537e4a23f4ac419f9ebcbd9ed4038809aff4b5919815806c42b70e2bca40fb379e5037b6e35434c47cd181103700121d4de6788d4ebbff7b3a7e3d6f0e255ae65544a7c0b1617fa0fce5452813926bd2fb21c3f1fe820c33db0ef74d8b6dfa6f499d4b0f417dd4b32db869de046874add15d1c4e76227861b67c094abc09beabd6a61b1c3fdbf14917500d8dc0f061ad216289dbd45829db35df6287b2cc7aaa0d05d37e34a6444133b6dedae6fda95b9e84a7ebc3e4c96df6a2f359a3441a294b986efc60c46358f21dcdcd7065a573037e9f12e0199b79426ab95b9faa2ea9853c82b0528afefa46e95763a3529aec9853a79c12b31c018b28f9c4ca77eab6203e5399d34d18b79b557aea5d6aeb97b8cc5c585ceb97cabbd0edb3837858508e9dedf1722e76cc4d6c09cf3c604',\n",
    "               '7c05f605fdaaf8a5eca9f2491f2b88afcffbd4a96bcb0e53f320f6a3e5ff698e8bdb9185689cc8012cfb9e66faf238d83405b9b79f22359a552892cba6553facacc3edbe1c96dc8cea68fe43f561e61a8ffe613534f8ee3440370ef4a5d54606c8a86dc24a6b4c3e152995932bb4447df552f427f0c0396289346cba8b4f20b5dccee54b7612597b3766fe7a9b3fd7a94ef26f13a3e2f13c56c7bc1b303c3c5e9a1b4f8b158fde2cd56b01d479aa4ada2055d93083d4bcdd8ceff432ea139982ca6206efb54dc6a18f24d91b3e65f79d3c2a0e9de7244c9a3ba667925e403c33a363a18e269d3723ba193c361b6b55a87bb972b7df6b4d76cd83a197e325ffd15beb1d8cfc93e4c97579112e91e4837e07ce862cb7df79ac296ea2fda532e396fc0717dae28ca9d1aa471a22a281d03a91f12d58ac3b0ebee333bbd93e4cfd1e44e3cbcc55ff751a8800a77744da4dd9f0deb11483628c7c661493fa813112b198265275d17a63f6c825b65d6a9004c314befe18cf3ec2ec53fb58d72e7c19964079775048696f5ecf002e49c2000ffcb8513d178a5076a0b9f798ddfd0efe2be65884fffb740e21bdbabf2c194922ea27968e169fd9e17a53013cce57888ee6cbd2e503cafb057895a09d281ec32f6cfe06341bd05f61e55c50945464736438c504c9297a73613374a6fbe8e678d48b0f89da922766033b8827fd7dc12daf7e3accef16c2fbcf725f6a9cbc155fb366b33f5307e218f68a13e24e227b4e06c453617219dfc7dec564fdfe28a5ee1fcb7859c2ed2b52a8e29c7ce1a794c4e8a82866d876664486f2dd581ac7a89f96973102f53625022f89f86d7eac319d03222fbdca870df5838093efafbbe673749dc69f69d2ac5cf842824e53306a65b7d0dcb3d74c63f8462fa4a828c6ade96c541d7db54a36ead6fec4fa9237a72ed11febf32cdef5d63c8dd45753b8b2926d9b04a4304047862ba9654c809ec62684c9f43da1643de4a452cddc54f51436caec2cf176d601debf8eb23739146e3e9c2125a302cd97783cbbc62c71c1367333f4d31d2bc4e1e523d57f582c54a067f8cc01c2d63aa59450c4641b2ce4a61a44c2c16e5fef441ee11d6fa2b19e31f7dd41621a4b626566c495fb5401de790172844b0f605edce7290cf6bf1f5cfbb9de20e425337d6829d51ce4c5b942f6dd2f3bd071e1392c5c040f53a41d5e05514bc8b16f45b7a78567fed8844f1f6e9c607ff188faaa1ca136b0e8ababfb14700e301a17f202baa59115b8bc48bf6cf6bf0a6c51cc3aae8fd1416eb06015f04a2a1d5fe709f0d23505d1d547cce501b9234baae328d023b53de16c616616f61b23a4a4cab9bfd7fa7ac5a9f2c42d9abe98319361e9ca69406d8684bbb8c9b5c01e8456c2948942aa9eee728a0cc84a7ad30739de74de751e4807f94d0e2654dd666a9d52ec3c25725dcc7685cbd703a5c738dda9e2def5649430bf536979491f9efce4097c80ce3604aa12d6a87dfec46ff62480ed6ed20d28cc9062db327cd4f515f0d94cd9e8ba7b03e0872ef12042da13bc5db320ed583a1f8c1e4d3e16f0f9b124939ed99c21c215c33af2a591b67c615feaab38c1c4c9bac266f2763b4a7cce437c483aedb1421c8fc2d0b5a951a3ec817463ec958b0636ceae9905c1cdfae1e8ec5bb838c5d2285b9a7ee9821d7ea234679f0f0d018bc4545fd0328a239b3dd586fc1182c051883237e92cf200bc0f2615bce9ad32b19cf7d131c074816eb2b516c16120457dd3de1ead63f9e998ff7d37255051635900179c330a21363388d7c7ecdbfe1d7c25385a1da0c777e20cb11d0a8a011e9ce4226c0d0dcfac60bf4514c1c1105ef4be92c5f369e7edcf30b3e5216a1ef8e79eb8a0ccdae02d2f2fe32e9f0e5197550ead65c0b264d0af6852c2042d85b38a60d8e0398864a7215554c9c6c8fb8c4a90d6f42d46e7d13c27b3e6de6e0d2b9b6276e6ba59a87cd3df41c0abf9a76d0c12f9893188895928a2d55cfc47',\n",
    "               '7c0599d5ea0c4e9854bdc5b8f20b100b07582b394259d2e32eeeddf51091f6d8573af9e318b477867a725658581dcf856a7f47c7798f212cae3629ce1bad237f04b7c12adc76a4e93498f634771d8e047464d14c518b05c609591955aeda3721148f2a81fa05339c82184d01be682d825570d49e689e7483ecd2c74fb66a48e241be5fe643e687022f2b075fb99b8319786f714138db9ed231c183d5e4f9286acb908705fb999887864ab01c50023e1505e32d231a77eecfaf735a1cdb0e1f28c5eba673bc088f3f3f53dd1b3265bee914830eae72b12e10177f2a94852302ba595d41de7f1db6d71c3464e1f6ed2bfded1660eeef75c20536958d0db9f41a025a6388fc79537cef183c4311f4d6916dedf09e0a151630ad5c6673590444b1ad11a76d8bbf1bb79ea57fad49d61aee268c72b0533b56f676f6dd8ebe185ec81576d00c7e8f2685f7003658c6435768636ef213d4a88808868c7f1ae445f2e2e03fdc36e442576d77e2b17db5b4f84558da16fcc98c91cb717ebe1b49969eeb1e7854e7c5858560781b622d70a34ca5d500875250c73a85e80111dedd076e9f8a16b6dbf790df45bbfd659eeff15d5378f25f4f4cfa5194f7038bd96bacd78e4e1ea8dbdd2cb8fd0cd39e9675004f673b612075a7d23cf20bdbe209397e95fef489aca71e9913fa346dfc072c71c16519f6b39b8f2c746ed806484ca7af932b675a5e1022c06ee1e15e434671d070be753b5ad3ebc051846efa3c7096f112b5ee1c3c567b0f3311aac56cc5d6889af262547b803ca52dc0508ffcc7233d79bc79ffaa8f8080a4a50089ee8123c0903ec78881d045d088554345a2117a8544d4c9d59b948e17609eadeabb6cdffe69ad3097c42e322c686901e0b537e501995b6d33c6632c1ba0413f8eba8ccec3e7de836fca14432041c7721123f49112aa981b55a46d0538f82fbecf739506e32c9efbea8af30abd2a3dc719dfab94dd8bfcb1563950ff38568a86accf4fea3c48738c9b5a760c32ddc267e5bb50799577af7990e6808116a5a4cdd11bb93cee397c7cb5bcd72b55799cc0d3585711e9aab00325f1c551174fb79e59900e53771e4a10e735e35b6b3c43f3dc4043e092bb9c1862411b563b04146a710be23f64d33332d63609f08c0e248787d195474e7ea0a84a81889059f40e4256e28a6fba9af9bfce331fdd2f59ecbb2f2294918133c8bcc2c9114338486e945166579da25d9e06e60fbf97543241034e87801377f928c478c29de3937bf1c5074f0186b8ea34c5c352ee13b75447e99895386c0efcb7fb952a3c1808cd5f8505820277d32609f2f06d0fad057c32557a19297e03257c84bc3a73a7f9925698fbd8d05c84fb88b02e696a3e789ea00b053fe2c67eff2649945434259c9859389c5a7e728e2dcfd97789aadbef0ba1fee0624883b23606dfd275ca7b35130b3240d69f42f019104c97bc8221e9cdf0fba4552615e03dccea71f77543da14bc2e7f143c0c40c07ddafc5997114fa803628c157e31e887553c445364f8229c6552cb86f01357e8b4bf6c78f4976bf878a553a591231647781148a3f504ec30f47b7797dac17f1362242d603bdf72d839a67dc074564c471b22c4f553c47dbd5f59410840d2ea8cf41cc0223a30635c214681b19e9e7f71e63b4314228246ac824204c9fc3a78c61bf81d19529e1fcf9034484ee3f54ce4efd09c9eb71263bc3325a7d805791f8df9e0c7bb939c780a2aad85d3a1ac9daac553bf9b50e4b8f805af886c94784e3313978cc2f478a51aad8be479b09539b9b42ebf48535159a5577a03918332e371a95d594341e66b37791a99e773279b1b2c4394e772349070d444679035ae9c7e6a8d39acfd23aef3a72d575d4d6f8188b64d47ba14e7cb8706b6596c7398340696c1c1b684090e72f3044ff2980917a38df91ff7cab560f41b9d890348f1a2c311d8ed32aad1c789c28f275d82af08af04d072061a86116761a2907684e11675b6d9666c3c85',\n",
    "               '7c05a5cb1b6db94048b0a5250bf12e6c48376ee7f5387f0eaa8304d0aa32403123c356c4fe60665287a3a9c98a33fd858c03ba759f4b337ba71dac1d9df5ec0a5fb2d965f3b564ae951a4baf38c4e9a904ee2483b6c5cbc11dcc25d86bb62a9a522d011ba39784f068cd34bf8ed8403b32dbdc939900bd956ac3bb2244bc83cdc55837bd0e4114061ef8aced406e8ef5e3fb191bee802a881ab144eca1e234bd146e327930b3b785fb1e608319969d15188b2642a37512e39a309aa959f0c839a77fc20be2de95aa8eccac233c55ee0455eb3625b836fad744c5448748245e098a7ccb047a46c2e8be1a3b61b37b33e311d3068c196873888e93124e6dc2c90144e06951733badd1dded18cb9424ddbd40c996a9a46c83fcb0023c131d9929b77c83ffc9ab7a822997ad088cf14dafc8fad9041629c052d6cecbac8a0085b65acf01778f6ee56d242e4e381f7fcbfa383b6ea058b9416fc53502647284d0a6b36a6b5ce6c9c415b0c26acef1f5355e63587142c08d005e684f0c63d2f0ab65df9363bec172fb2b54d30e06f64cacd1ff6f893c339f96cb040db3b9deb1e48bc819ce5fe71c2b8799ed702fca243b0a6dff898e190920ba114f260b4d902a3eebeb4a378af25463799dafbb41eb22464604600eb6de8cad2345c47c9f46ba2b1c95f2316dfa2ff4e1e83961d9ea074ba002093baa6e8da65cd72b50ed6a7fbc599bf038519bbf786f2737d4070e62e830ace8cc762597a4a74c723e5e9cd3f65ce19272686bab8d0c9985e6163b8946224f0bbb2dd0f8cbdd03a65aaa16f172f5c7ae4d862ae808f682256d76e25b6d48497aeabc207f0bb43cc889717803ef1d862e7ca163ec16d612a38553c8221f8984a64c9e095bee03c2355dc578185f020e6f10b1efca9a38c4b40511ad2a46f3f072e4ae3cb252c7363befa8a7e1ad2b802826bd2926ba54cc09503bf5ea8bedcb0b7ed3d9b01764bc05e4bc54459dcb573b2e5b071bcac6ef2cf33058796a17a6fb7f1c4edee255f7584d63d0d302d5c915fd388e9f7ab8f535b9365f1d669471b73d76ff88d133fb2f8dfe3844cbb2289af8f4c4336cee3a33a5f2acceb38f6589d634657adf5cdf212c6450f031717118e674c201147b81f909941b8f34aca7c6c183762558e855cc8fe75c3ef212b4624b0d2ca9b9b55db4a1259c9c052091d32246229a64e3d4e1e3575e5bdf67c9dd09046fcdbf758c9b12b136fef0d510db170a8d21a61b80611d3857d165f0bb833108bbdf55f1453f875792a1dff58987f7b26f08f9fe94112b962a50898cd0b4948b5f53c91b3659589d6ac377f63f1df8e58a14c8a16f92efa1c553eab7cbb223c8e9676f5581095fbd33d2d2fe85de088174210ee451841a80f31671abffccd68406d4b2e08c70821226f00ff48fb0723bb95f41c6796164ea8ebd94059f1436b28b38bd0730db8a39529723ce5d2dd0c3812526b56bfe7a5bb860d05000ed8274d5910895b96506bc9d97cd718aa5c7949735cd77834a7ec00eb52f5ecc92e420b07dc143ae5a9fed8c5c1c23342c63f5a184e077e654b42cc90b8286fb98097aa7de261977466cd26850b28c557e3848c49687930c08622a28e386defdfa36d2aad767e15d18e7792434685a10b6ef79f7334a6c75744fb1b38714224b1690aca509a1d7a4239c85d9ba45a9ccb8eff72f6a20a27edd72915e9c553a0720cba5d37d66566e5424ad1c0796bbd09a5afeb438d23bde4743943eecacdf4db3c4d48f3dfa9b751c6012a0f15025126333709e87f5d164fead5dc1e3eac4756bf1426df18277f6322f12ecfabf6efd21cb1e35f802ea46d6c7e7dfb54093ea66257b05a3a9a5b366fce402bc31c49daf2a5f3d9500cc262dc087833f5bdf85eb0e72bc59da921a943c78fc965758be6e07004695545a603766f170e702b58e198e34f4134c5d0cf65ff9736d807e61fcf61093e741846b34dcc99687e40cfe7d688d5df2b1750587c3a007008ce876b9b8c0',\n",
    "               '7c05d60131e4a6e611baa9b51b4866f42f17a7303b3b5235ec279c69b3ba70e12eaa9977b68c257ec16aae0fec34c4fb8c222bf0cc5baf9eede10be5549b62ba3e89681e0532596f2b5560b03f9ae12524b34ebfa657176f9c4f30b31d54d07914531d5257db9e635fdeaa321ea78612fc99627f9615f401cdad1541342cc3352fb75d8f93bcc317b1c2639859c5f2d75f5505ec0474d7ca0286da3b2dc3b67b408aaa6d622851c0fe938be886033b2ef86aef56cce35d63dba2e7fb2a35139e5a36b3bc8258aaf696eb26b4fd2603a034d9f86eeaf6649b2c4cc7815261be847e7bb409891b4786c75faab2dcd71367320a189bcddc6e05073ae3e3bb8da66b067fb4188572c1773a806f809c602b93e0552e196c1380f8ce6f64b1f726bd73859a6ce4b9ea5690180b3d3fcc766f24fad5acc85b06f736dbbcb9c26c5316663c028a413f792e9cefdb38a20f603f513b1c17985f44e5251e11f9adbfee5530819fdfdad9f19f16af0488343f4b8460827aa750cb3a5cd47fc4bd18c0377e15489771b7847fa8b15fdff6aeebd652fcd1eeeb4efd4404312e3d68770f359b7354bcb126104a91ac5168053de7a91aa0264b3e9ca08136ac593afa44da00d793cbfd726ebbf2f1b38c5fae8b7c44245ec8016f9d24770d72976714581984c757d77140a82a395c6e3c1c1f005ebdcd13ce13b190ec4d362f282747960c8851ef723a0a9a2667b879a405129ba1ec77668bd17d5060add5f1ed9a6ea33df754b196a4f6e9bf6a48863944dceb618bfdffe6d172024a1701acbe23660434cd180be32c32c06ebdb7a885ca088312cc92b0577d979328272052d334e8e673ee85aa313236f5c073bd1b73329f6973da32f7262f0562f9047ca016e781a077ca2dc65798c351745efd4356fb76a59129459bc006dbd02b713ab38147c2d35ee0793c34a37c5b19eda8f626ab2890cb69f1f513982c5bc3fa8cdb8f9f4de17cce23520eb71f508189e0f5b547d38ed9cee1e7de0fc43c6cc448aad8f7e61dac63f45386dad4a1dd59c78f4e40d32fe80f19d50d416ad730911c5fcf4d7d49a37b4a8cc708133c16607c3987edaf4a3b0108ecb935a0951d7bb0b165bf1b0915574a73cee6ff00363dddb566b57ed92a402e31f247a2ee809c5dea29987ef91b26491bc84db183565f6df8153dec0de6d17092671ebc1f4fa7c3a5ecb9a0efde2aa13c1cd1d752ce31769d514d964c08457d406f98a88c67805766675c16cb5669844d97c291e05cf67e4ae8d86b82de45230d9b4633d0617efc25f151ad08742e112cc5fee0ffca2b268c096a313139a0a86d29034990717b141b3fb0b4697dc1c8d190a6ef0a1be65778e08c00f4707f50af6a6370265edc138637cf3af56c49ab9a04633aeee1c9fd92c95acd2b773e0f28fa3c62535d68e2b8525bdbb9fa9a265029169f05ddd9d14b6ab3acb2b3ed815cb20b1576b1c34eeedc26f80bfbad76b8ae8c2abadaae4f4956d3fe199429cdb5c0e431b58d4de7c56594a8ff5f2787bdca68854880476b8f5a8a85fdd403283601a8110c6b64825661149c6b5f704f7d915e57ca902590bbd3bf9f6cdc284f0ae83c02705aa46b4291014a231367747e763a698c632d3d69368af7a0f67ec2368e7293b8e47cf55605b2080676c2734b5f1cec201a086e22df0a90a5fd7d271d8291f675c0759c58f6d0cdf0d0261d63a7e766b67dfb42d0627f9c7d2dd9b6276d727f3fc6711bd3bbf7212442f89a67835bdbf04501fb31857043f3adf01ce085435d8bd0a9ac9baa78a5893c95441308b2ab57bad2edd04c4606f2f331423add81f805954941c0e1cc5646d543dd88420793a1170dc870f1f30efee55e5ccaafb48ed55ddb0bfa78179324394738a6fcc3eb09ef00db4d5965d2c839152302100193db631ff22d827d6edc97ede0745bafa8334ded9815afe6dcdb69c697e76974f7cd4078761493584872434ad4070cc8c20f4e7bbfa35fd4b612ea84529d9c29e37a',\n",
    "               '7c05ece46ee623e69219a44aab1ef59a3136b2e843d5416419e3d740e4de9202339fbc688ecad88e05c257b88e4eb58194973aa5394c8420b63837c07cf20e4e5c50cfc227ed5712ec96c79aa4d9d6d0d1ac491b3a7ae603257b4e6bcfc189536a6347ed9063c61e26959d8318ae39718d8d3495585826b4d5d5187e26266b9a64db2c2f2d1cfbc314668444d66a278a7125ada752a259f9fa0ebf818379fef0bb681e4aa7cf2dc22156fcd1a898557ce3560114d8d66b5f5c722f288f32f80aeffd40dc936fc1ac2f060d62d3e0c8b8d2b3ce5075db126e9f011850bfdf3d555051863791e057e0d572d0a35b05cc15805accc6c1239464ab70268839fa0e87b6fabb072bfdd91dba43d73a11f18bb36da126febefd1b1820e9fbee721bb34c93a892205f173f9419b02a533333ea3fc0f07e7e372ac96f1defe81d15dcfdc97f74aab2d9a4d8bd6ab5dedfffcad75eea267eced9cec6689633a7a61e585591b89abe145034ff0f5b44cc3b27fc05702bb1b4742a30a20ac43f7760833c029b9c82b7e3f587a1001a23581b21e39c781b18de725f40a6afde8baf794a6128aae25255f8bafabe985862274819c7d17893f71c0b09517d8154d6a100ebaea82a9a274729866faf27e7375fad94f9397fce5a7f748475f2b49bc02d3c9f1b8504b581a8c964836c0141f530c55c87711812d137082f304e5391b602aeb66a5a258449d5e124065c7e38e6d01f639fbae42a9105a91f1bddecf10d0108b7f21f2922774a6bbcac419460db9264dffbf80e817f23fd81c37f86dbc378548cd3318ebec74577725f2f1fc7fdc84067ec1f0519f9fd8deec5692d9756d25a634025b8b171ac2038fed96b9a3529e4022b927eed69263cbb77a3a4d6fe225c8c76fb244e1b652834cb6e181bef538d757247fd72014af19313cd67ae2cc5f081309fa83fe365a848ee7112f72fea594a705ddccd364e2a86865ccfb7e7bc0f41fcab7c92b76eb6371859a876bb3f037a20d0e42301ca79fd1525fd0fd2bffb74c56d73dac024a8d6be60e27b9a169e7c24092b66baffa398ef3f0bf2a6928521911cee1b2648ba6025657f659208e6712617eac0a81576ce0c1c264ee6b5c2422250689db1c852214ad923cd23db73106ed1e223062e0ebfc813b287ed9766dbb8099611f6b80de9825e20fcf26bb8e85d8d55024b10496b60e8c542eca94be49ea42e6308db83b36aaef3dca2773c352a483504eb957db2480372072818318f9087710d62c4b39e44e058217e961a7058c6d768c90c57c19a5e0ce4cd6ba5cf44b9b1499996d9766c4e8a038fffb116d517d79a7e3ef2ca26ed609904039b70de6468fd478374f83b02c06d006d2953d2fa9b2aa733b862554cefecfaf42c4153d6ce335f702c842e0f09e2daaabbbe30d486610ef315d59751cdbf5d923c3f237c0e42d1d76982535faf3f2d189ec5199f9048225a006ac7b717ee1e8d2b741efc738fd4f688972d321ddca81c7dc2fc12298d50c9b4f84a11360226111b469d064d9ae113a60adcad3bdd91a0cfc5df9e5a23e3df5c0e32c5bff471452ff08e3755b0640ee93fac46a9dbb03963ee4a9c48792f568044490ee67b9c8df723103af94eccfa31a5bf8bb0a79e48d9ee19fec465958a61d6ad51cb1cb7842156886c7ef7bc773981cb0ade302e77e681e859186e130c4ae7cf83953f55ecc1c07481ed919066bc22cf7274eb633633eb2d550de41c761b1a7ea5d31feed223f52372326113d5133b629fdb37d40be78ef7abd934b924db0b90966e5b17f0d3a4991f65070f9d151a1ee0e8e678db5a1f84a793e8ff90400b164c677d6bb96b14b3f7de6d497e33f5dbdbc121c54f60d75322feab7f27acd8bbd4c4f319f0b5bf1598be593d8ddb3d07d5792dbaf0f971bcb7e308fc25a283bd2b870a9a34b476f0bb1de8b1cc040da4174cdec787c8b6479b4561904132000fa04b7dcedc3d461c26b21d412b6f345f6f390cdd05e5d702f80d6cdac943',\n",
    "               '7c05f60982e12c55cbbac86cc7bbf1796ce97691832e97852aea4ea1d8a0a94cc58357406047d6bce2f9b19abf9a1ca81db072b5026824184f95bf9ccbe306d3582502d534a3a7ce943a3bce219a02ca52cc8deeca627a42a0f1c22a77b1af486c07097517217311165e830d3bb912ac64eca10e1fc12eee86b82019ad467a370047c173099e472d17ec0cf7ae3f4a8ad3b81406620ef031e442956ae20cc5e902708c548684148e314502e03ec24f31b48e2a7dfdb3666557b148b73cea1d30252bb7da634c8dea247fdd9a0fb0657c9c0157f14e1b8fcc90f15ce7660c787a998691176014d75fe848238ed1d02971f9c9bc283ad341fa5e44c504c85be31c0b475e740acee43e42d44a3e12e72089fa25584c09c763206b5d3b57c6d06fbbb37b244772af3308b0240c45f475646207af4373f5b8fd78cdb4ad741c7c8126d27dfa0493b70cd3e37061b71f5260431a2be9ccd5abcfcd53ee42fd28e7a68e12c5d02e927eeb45acf329b86b125ebd3df00e2fdca033d0c65c6d2913f365a9d4226e71e45a42b0b9f00beab394ce5c11f7aafa67b59d2ef191bedaf1d89a67e8a52422413004015753961277cd5e39ebacdfc3d6bfb70dfb4af1751872b777f19360758e3830d7a165a96ba170916308940a97c75f7a93504a2a84dd7380354001a1a0bc923c088f7a1bc12475a16839519c1436b880eb13f8d05df79575d082a0f201235291c1a5bc019d4466fac3291599ff08e6aa7f81d64f430becfea0d750ee8a33c14ad5f7e44639c9ab62788fc8574651fa4333176f28ce677f2beaa37ca0ccfe8d3227e17507ab8193db7d63102939bc83047998bacd2e571b51c797201a8f26b761f015e9abc3a65b25347ca8d73efd6a7086b12f13d7c72974c409d312f70392bdf32bb37f471035078daa29296c574bf9e1e92b4461bd74f7e0f12dc67e97410724ce195b593528849eb3a80bda4c5ecc39dbe6f6f63e12d04bb11e05b65df7b7e36f21560363d9e4b89f9db4e8e3238b68a8247b6a5fc3f17e53e852872f9f187236b6aece37ba9dc47aac7137a3f53d61a14f40df9949a61d8cd6227f7ba05dcd0e49f5f098c76deee082f0a7da368753659e2f55c8ac2b1e7f1b2a513e2c139f64e616e2a2d1b5446e2dfa2a54acc5a1bdf6e70f449156dce4b544ca4aefa16fbd1c1d7027338c4d8f1aa6b1d3acd8c547735d707c7bdbd62f08e72a0b2117b3e5430a84ff9d612943e57cd67c6226c58eae9784177b63382aaa09c91f90fe7b75eecbd912b34c48c9b825ca6c954af3613b3ebdbf8b2d324ac02c6cec00e786bf8079d52083fec7d13eb9f635cd72a46b31c4930cdeb611910ccf400f356370235572bbd8c26dd5257d50ab394a7616c659ae0956985d76b4c1a842013a8ec2bb21a6fea3c5c42e2990425775486889e875c4da9bb18a62ea03a8046375fe9047778e4f9f4573ced603e2c01b1ab07e635710f9cdaf5f95c88bf4ad09842ae6d56437133b3bfe8c320f342612d505573da74393547c792db1995e2762b7de13eff2826056a051651fc01116038b1c93b5eb57527358805f27258c0cfbf89752b92c3711a7eb68c621ac9789e84f9b8e4f8979f71745d0de11d9f3ce57b01513e20001c2625cc0320c1e5b3b27dd97d847d07c8fda2779cc130b61af3da9d6c9662c419c11c3683bbbad54896a349b84289db05385139bf9e0b2c4e47912ea63bf8a2db1b85a04f04e72d4f0c9e6484557ed533a653fcaed9d1527688446d7036f4b65d4cb43ed828ced1ec1a01691f31fe1a705e1f0a5ab059ca7b16a3bb0fd3fd6732176944502ac098b64d1619079fe565f1095454d082b3f809d64d3fcda348a597864736456b098d43d102bf21db6fb73ee6e55acc9daae8c863b94831db9432f62a79422ca831db97e7350722c04488a53d5063b2fdefd03e52009ef0caabe483a7703b6edacc730f1d00bc7cb9303e300bad93bc3323ceb10a2d0867ea934b101e7309445fcf89e5f',\n",
    "               '7c0507e9835500b9efd85a1d500cdece9604f00f17d4d5b3206133f24ab8c33115931566c99ae4a1ceb2902151f3b4c0ed1b8ade40bc40b409c37483e336f1a103ae330498a8aa8ef15f296696433beb2dc62a14c731eba7c5f7b6fb4b1b6d9a81261383ac4973f9ea45da0530dba76a5518bef184817027ebd89ead18a6347fc7f4e57def90e272240a699ac507ada49d44c9ed08eacd05f59134c87a9aff6c186fa7eba5e0148b3601e2f925133dd7e219092eb5eb9060d611ce3eac8c330c3269f4ecc8f95c1fdd3cf983cf16f172f9261b7035a07f1ab8df2d32b7fb585264f91655b23d8ba8ad2fe298a6ee8d93c2911f25a1094f959fb87b7fa694caa812c956fbc23cf9416ae790b59c45108d1aa0b7c1a32c8224544f30ddb4c54310d8db61c9f31343cf468d75cc56cf1ecc02ec1f80facac4e1a5c320874aa89257c95473750645596600990ce002d257ae734fc28632a649cd9a2f31a5e602c5b516719faeffde689d2c1a32d53b728203e582b34d0227cfecabf8a6c5db10d6593bb314b1c4d56d5bf144c986b7ae102db46fb122d2bbaa79b0082f5340134030d2a48ab9d127b5635ed043d1cf76ce88383ab9321e6902709edc5929899e6f27688e736c6dd2fcc3d1a2df56d04662b48df594f1a1a7f638dc0b6ff5aac9db0b2b04304397c7105a4325ed52f32a4f74d9f6785e9863ded041db4e35f97b57f59b2379bf8aebdf42301229154dadea2c78397998098b998bf76a38ba006f997ed855d9ee476a4ee9fd4c282375d48a77357fba1c02545f4462d56f47e356240f9d4c622b2dfd329eec3efe12ecb7dc61b6c14ee6cf7c892b60a434e0ff715824e2fb2cb9bea10cb701c7aa6bf66b24fe5efe0307699a64c459702c0c29e019eaf293a0d762bfd3b4200bf811649cbaad043c2e197e1319d7e1174f6f55c6b8b99c56e0e3d2abb49d7b1b18c23c3043697813a444c8f85776e3fa0faa646d3f5f711e5ffcc716b7ea5eac9422909a168f2ac414b022dae58ebf43165de9cfd0428f30e01fff022ff3c81a2efc5a6849fbf6253b0d152dbad9c812653489f54d73c109817cda83d6a15cb0df6e9094acd4266ed5daf6035dff0a931fdfca37e51a83550e2c66969590a3895b930ba21e455e28d197c7d5e9fb1e5423484ba86fa3e3e8b191a719f996ec35fbdb7995e8402a8e05d4febf7568cc415e5225976a8eee8325a47018d95fa16c92156fda9e862e2e949ba70eb7cc7a48dee3408f87e40e179595815754984e59ab447b5158485248bdb062a4ee0e72311e050ab11de8aa2102276fd110f31b9bf8863c924f16f787307260338afffa7b04722a15ed9903a6a3d15464a3e456f32a78866f830184cab39da29835461f252a0341c459e4f23ba329fcb9d3ef32bbd489693b05ab19d45eae258faaab71b6d72286b233ccc982bb684d6478143dcd89cb8ca968aeec57ac68cf955e1d3c02638219b36dcff2c70126d53df0a7e31408093b0320c6f0fc5ed4e0e8bb522ef3688c6b1100a7df7be832402b94b37f8c8ac8675f2c403f60fa94c7879a763579b7a867f0fe9c3865abd12e0f8281aab794dc5ad4d14344217c8e9432c31db772f93e53d3b37e6d9321407490ce349a6badfcb8135c6950f2c50891296c98b39c9de06f59b257bffcaf4244748a22336d9b81af19ab6aa86f5bee9a314b8e34302d627df162edbfef3c3767e367175343460374c5f6a8210ebadafa1dc731e215d003dac5be6eaa7b76e8b14985b95f6b03a2aec2f44caba4fbeb8a3b1f7d7a7935e2c7f4477cedba30b2e63f9a8c46e8cd68618fe403c0fba4fbe5c6ec1534cb436e422690ded8d3166637c26bdeedcdcf6035f746eeaa82036002b06748f16ebb282ce5f40d18ebab9ba1d0bd0f2699bae2c3838ca2295918dce111388edaafb89ae09ca68c492606a6f0d52bb9a3575f525bf4e7d5034a7a41853ec2de61a2f3dc66ee5f1d4e967c1d16e39b27858b30f25ead8f8bdedb9c02',\n",
    "               '7c054fa4605f26b42a49d93f70dce3934f434247a443f7b5622bd9f120f99a6e47f460d801dfe438c29fc040c710d8a631a8bd8fd174ccf6efe03f56c905a17536c6d1d54a58c8590261d97a51dc7813218c4795aafc4b16a25ef55c372a9cf9d8867757a73f2cec25d38b41b80f9a4dcfa6102fd8a88c352c0a40fcae2557f91322dabd07328e7e825c780d3f77bc7ae253657716b7110560b56eccbcafcc3c40740b38e3122276b294876889dde3f6315dcf025dcc861775ee45d35ed42b5b6190ff487156d9dba9b694a22ec451f18df8bab93e2b7fad543f3fcc6aa67eb4630bcfa3b05ad7d4db4de3e2cb34947e625e322eadb9998624e47e470c6de79981eaada1ea9fbaf4e925a34d4ddf9ac98a7791052699364f5b7fb08c48f56198b2e907852dbc21ee8038a42004ae1b5de0267c807de0d509f35f43f7051cebd7f801bb3beef507545caf817d607f0f3cc944178323b691466677e278ba9157b0e43fc13f606c03e9baca6966030e17f6a21da844469310540bfcf9500405cb6654fd515c6975068e2b98255f17993b37a783fe9676f967c9ce690227a86a2c8749836448c5bc39cdaed1c2a5704644a356972ad060980a6f2c66812a6f4d7e6a39e7a507c769ff64091f5bfc731349ba42c042107c925b86a2fae67afc0149ed1a91bfa750e6ec3bfba6b1658d62950732ee47b492ac6c0b8015bb6d544f481bd8a2480035ad5e0029f1cedd7a90c5623a3eb3ee5d8086f639d3c7f7a839ed2c7b2aa8d515f83a8464ede4fb5b1f5316d776fa58477956f5998addb5725ae8de9832af93fddff9de7796ee489b10a84a1c80968a9dd09b24e1ec5ab32fb3459f1284056d68096d986223e238a4684ce82b8346fabe33ce4766e5a73b20448d3f29171c87b834e25091ab83a983a323d1146db14fffc70dc3a62cf303a6abe3577fa44931319c37af21102d565ea1244b5edf85fa1486278c81195123ecd1cf33cff07d6717191d719d90cb61f235c9c551abb702b25d637e18fdf4ed25ca0103de87dc3975d2823d88bb00a44a9d29e70fc093cc90d9559decde80d123682466660c744902143528247163bcfaf9c30cf3cbacd3135d493f05fd316ae549b521c28ae7109c4f3f132f6c3b57fcf6fdd86e377254df9f26337d5538f92205c07a44d3f5d3197cacba576be3d7dc05709a60faad925cd06ca170ac3c5631418bd8c247f2bdd9e958097c88d9406e68f04e17a7effe5926f8b1d6f62cb5be350d6295a53aac8d903a4fe893fde24340752fd0846a5fc5dc69129e10048851dc3e610ece57e9fbf864144f26581041d5fd02757ef727a180db032055c92ff58cd5272f76b9a1b40eb0bd60eab2c8b167c813c1d86a900e6ead4c318c7d80a00f4f2f3c0c80b8d4aa49655874ce6e2b1991ab649652a1fafdb414d4e4237e840e9d82e274f1694d160b8a8d99443f4e4b04d7cbb4dbe61b8199cc9e094c4deea0b8aaad6c839fd5c660cfc444dcb4bfd8888ca7c267f53160a00596c88c1a67d4ee3d0d5c3e6e02d353b3fb4899941cd12a306d49052dd1f605738a2d0b9f7579471973d60d5463b8f87f4684a5ba348927d7b5f70d2f8687052bac0fa43514f18cef3d78af60f6f91030e3177ff4cd6d03a6b84642a8a21fbf5f222524ce8a2eb5f396ae93a06483135e9c3d962b8fd8b3433f39f7054dac2bea101957ffbf74f683e446922d592437ebcad21d10c891c30ffeac7c3007a002e6e34bf6b243ea6df1c3709a92d6582c04f3d9fe210865b8c7c0ee8d0a40018e8373f729d9997923d21ff22667e74d0381d9520ab5864a9f9481f4d434bb629902ee5b6af61d62a7b103df9f6d510744c23ad57fe8e8ad415ed956a512fd09985286e70f7636c1d1652abd1a3d205802832ab5fae58d1317c4e6df80cdebf14952835058ce18ffddec37c6d13d122aebf30fc58e482c2edaa961d89d56ff1ebcd1ef63b156f27e98e7eae75d64d74dc883220900d7c802511267b71302',\n",
    "               '7c0511484fca411a2d429a34c15366dc1844b98c5e20cab46d072d38cc7c8dcf7b0f1222f58673575e704e359b219a10a42130c394d599c04b60d520ae115312be89e568044dad7f708823751349b4fc5025f4dc7ce8d2d1dccf01053667649985f8698229b4206f85e4160471cfd04d27738476bbd8240c3a9527af8f3226cfbd080f72b0a07b94daffb021e07a687d8986b1e52e18d41d0b523318d295730f7e27f8403982757cd1ec5e5391e5714cf73408f360c3ff3ef59c0312b651b208444d7f2b403dc8940c7f6a3d9495b597ff7bc1bb732c9d29bbd0814c53ff34853f7fac8d761c758a29878c7020ae1e2bd5d7661fe9801576b654b33b589eec785e1fbcc7cfe18468682d19257f6e9e3bd11f0be1d6040975a27eb08e4b5d4ee6e75a211c53cc5f67768475589d0196c89e137fc77d8b21fb8d26509398a94b0c4d091af447e9aba0559762cf8d9802d9fb3c694034fb907b9cf3b3933a07aa07e9bd53a08482d9e4ce2f46ece1692769a7adb8bc91b930432b713b6e5a3f9308b25c6a649b6b867e13e988368c0fb2b48bec3bc8cd0b9b3c519ec765f8d643a1fac2229876af087ee4220d046fd580d565ee93e93ca3b6b47f482bb2dc3031a0decd1e2ff10b5c7e40cf309eda08e251bbdccc0e982e4b420a897bc9d3d119ac4bcb09cc4c77bb4e75514147b1f69819fa1e53273e93950167be52a6f45e046bfc1769af0656a5fddc8bd144ffdfe6661bc208a56a846c80e87607f39065f100f3c2a95af4b6b4f23fb3a26cc2928b6c7e4f8474cc0fd6975047af5b12ba672e398c9df931cc6567b748a7f28cbb99049b1a1e9ba34213b6da66cc1ee18851c9412cd104f8d28e21cb9c5e7e8eb3b64ee28b5d656816564e6960008cb9b54a142f918fe1bb306f9881ad996d55b0c9b45cc7601dcfeb1a5029182a73abbb02e55d72443945dcc0dae572f808d64dddf1e4012742934cca474607e2d68cf486eabbaf9cc6583d2c7863e8997dee3b1dcfa23d62429feb6500935f72494f800d897da50f5d715745927e4e0f9ab2cac535e4c31208c7d7d8e3e60148d8d0620dd6fecedbe3c19262b018bd21d3b8bd13da77985c877dca5d89326036418f86d8e466124af1a418e109873dfa9a5289fdc0ca8bd99b1c0068381db318f92f90c64c13efcd25fcad0d5c0111f464811ff246a709b3d23dc9a1055de595b5ded4583bc1409d1b7e5b8417e4e010731b255c1ccdc04688d568394e6b359a152ca03ea93f5b0e0a7a4cfcd361e63b937c98c263a0a06f19eafd7cccef22e8a10e582c8c2b0824409ef99ef02b7b7b93e643441b5196d434d44e71033e098f6f50e474cf3ed0e84d4f4254f041afbd350b9622000dd0966527d771576b002039d96c43d198c92067c69b6aaa4ea0dd8917fd2ddcb55f9580331acb02eb7f4ce175ca761cd849dacbedfdc50ab2718b71fa85fa90dcc3762a320605e6c5f055835dd8ab93c182109c02087363cea3037bd05aa9c7c913297f207b104fc37ca2a6949e661f2b6575725f7b663f773efe86764e3fc4600aaf27182233db29c74f2752a4c09b3b34cd4af7eb787c663388adace7c68c83de65213204dffdd5fe79188b46d89d71f2899870504ba3c1cf895704d424e7a8a8510795e878340f45ac5843eb0115f994b1926527981ba76a746ef4b9da5fcba554c0df9e9b772125ff066dd625e18b223914962f31afc3627f562ed7582b4eeca6c9e6ad4d9ef8c8f8ffebfcd0aacb71d3fab3ef0824fea583a2aca0440db0f4e0fb7ca602081872f37db60fe7ced170a1a64bf45f1393365be3fb40a8c6ea13a9ed054a9b75b2e7fc0a37394ce23ada7e4858925cc4bc27584bed56d1a47a2bf34cb651fe2e7014c72fa505af46313b9274dafcf062664c29694b1069376d445379666804bd190f2a512d5641ba42c1ac4368af3d4144e9d96378aa333e0d01eee09b93669e11769b92111fa33287114a6021044e66c15cea5db182255b3841675f',\n",
    "               '7c05b1879cd3fec1f5206fa92c0f4cc916a4f87c5dbbbbe0282192305b0496928d1ce0fe70a2a7913f705458757e5c856d1f4cee45793a88adea785ddd432d07dfa4411103f153c28f09d6a9c49274050db689b83b4343d6825223255ab2f4438ac7992b2a49038a00176557447f0cf5611156589b79966ba08ff67dd1feef26fcbee243358f788cffcd85f7bb6f3639c917704de3691481fd77b10fe6cf08fcf23bf8ea0b77bd38dca0f23191e12ed9acb5f01e4d6c50c0456a25e4fc91d7745460ee55e27d23be192247704404b23a8c10725cdd26553bf76b8aa1e16b2062f716db24edc176775f4836cfe33f76de5905a08681a19aab1d3e119b6f6a6b01ba8889d3cd95541432067fedf658b1693ce9107a281336fba5710e14e58fcc62c0b495e98367573a776330cd4a77cd8f4d78604dcb50353eb83013355d730f20e5bed68ca5dd2ecc5a71ada602997cefe8bbe8f104cc9c9e3b3d24c4a00c8b1534502d67900d2d8a05edfe3aab61a460540fd93975f7a9f14465c2c6d93060cc758370e7e88b8c3fb9ee6a406d64f49cc68de6f4a1610fa5deb69c2dd6ab78b4b288b2a5b2b9889a5e171cce152a3aeafd272d8577cc73852ee7a4da30b85e3499c6c54322fec3a12d11c98c07be2032b65800ba1dce13fe19554834c82583cb7eb7fc1533789da29ab2c53cb11e899d22095c20ae6cbb9b8059a9ff337f0ce575ecf96cdcb7a666188c0474bcbf1c091b0a9ce4187fd59d251f2760bdf5d4f21e9a4177ca25f7df25c3bc1631514f9ad9126a1c72bb4d5e196db9176170e93f2407ef1bf034ed48375d0e931622ad4e87bc177e1e639bc393dbd5488532cf0ec7521daa918d86410efdab716eef008c5d916424c160ad1db1ffabf0e0fdf4d4417651b16634da9d0968f1698de1ea60d187e26046abeeced1f90553f3bb854739f4584a6e8f032700a8ec6f3465873156469a9494f61c62185c32cb45838e321d87c52edffe4e494d828332983226ca2734577a53d8d8650af915b4dfbd264f5428fee48c1e14eee0781483ae43e12481300b3286e78f35f68e145cbeaa5025377ee335e807d424fd8d68fa54481eb9e3b0b264e45db07dc4d34b3d07a5dc953a21af8317189ae2ceb1e463d55ce9f8fb8cd8486d9b020b437ce19af09db6d7b817ec4b770fc0eee3b749162fc5c9b8970e26adf71b6e110521fdd79cd5eabfa9dfdb5ce5248f35b4cb4be7d60f42be47aa876f5af7eb385edc19dc5a6075eeacb4a6f02d4bc73ff2a0a3070578f7dea8c63405c4e2859bed22e62e6eee293b3651372d2c07721b7aa0cb54311fd322c819959261c6504920f8cd9642d685c078168c5e332594119c6ec6b9f0a2db0bdf8a876d0cfc1642b59b8088d510b4c3102d3f9d25fc164b32656e0eb69ddf78fa75a3bc28d75b0ce84149538bd5b7f8227a166398c24bf0654945d332f9422d61debc815a59bc726349b5d8f0eb154aa53952a9c78c5d21e389da2fa8dff4ad4a230ff354a2165318f45af1e1dbedea29e8317fe8a995426f2c9b60710652b0f629a5f5cf73407b7f7aa75f4aa90eb3447b253d25f12eb6bc8e69dfd703c229ae85ea1b3d5dc7fb0293807d63d96d35debee28f45f6253eb66758dcdc8dd53a42ea3a7d7888ccda9d8ab431581c6547d7fe5e9699e617ea8124ba6b809eb0f2a9926ec5a330766623fe4a6a78baba42e0008963369a54bf63f331d22c3449f38ce1afbeac30e82d3192b4c0c974fbcc2c6216268daf85aaa0848b0a3c28dd053c0269c608c1a20ff895d93476bc192d1faee9124f54e277cce7887d28d7f92d8a3838dd5f7258d531b754686c3979f7f7d297dd441ebe696f338bec9e1b30dde40bf88bb5bf9e9436e62bf2e86c8bfafccb8ad1fab0b84d2ddbd502ce5a4dd27e4ed08213102fcce3408d4361ed31227e2ced6a175c0aca26a69fd1ed53fdd4ff86418a4169755c974967379ecaf837a608158260940e763d2bf4c3e9714faa4541e635',\n",
    "               '7c057a6939fb823c85b16e965682a3bf4577dbf6f77386fd74e9c701e052b7d85854de899d2301585f30185a228fb7fc4aee744d47e0a751b39e2305610ea4c6a23403c57a68d9443b6748cb6f89d22789a11be08fe5151484c775245e33038a1f26a57c4a72c1ce9805bafb69539d0597ebc5b393b600248cc8490898b5b59b81d8500a9ba1b60b6d2a5b9fb663adb3dd65369ee210a2b9f906566535016331bfa15d4ba96c533bc0a44abc865a3ab580b313a7624df45d213ababf5985bf89373eee6c89258fa1b45fb22eb817fb471a2f0b0e7891a30f233e5578763a536e3baf1c52be097cfba793dfe76a6437ee5a47a49f7d5cf1023b3933f86bb7bfe5de0f143e807122fc0f36efcfed1a658bf0defeec166068c3f97d436ec635b62f594927c26366c9a72a6610f3e03c099a7356bd4fddffef3f8fd8cb18d5e7e297c63ff6741d48082f4930206d5178173adf5981c5de24280ddcc9641d7203a89bec09cbb222b4ee981623679d604b9e95ca41b5f107e549432fa7f9d38ea879c600a5f2e3caa8d62a03deb9063a859b3d72979574d8fe4454573f3b87da0ffe9df5f7a037c9edddbf9f5e9d93f65c56934c0381a991661da83b2a13f0d39fd9bc0f986e041a5272bf759cf161c2ad8d766a7fed98c0288d5ee0a4629544cae7a804815119b03bb5d3ed0b188702c7f7f57ccf08ab03e0de7ef8400772e77ad165567141b2c9286584697e34ad8967f1cd1b41f3560d43fab1f09cbd00622bc2ca631518ef7625026a7b758311ba45ca378dbba870d517d63204be0cd35b01ef21ae9c21d6ecdb2de0753d33736b9c8f8b7a30471b7f7675982a67d909a5192296f62173e5c753e0bd680ceae234b06d52bb9b5ebf56af940244e3cd35b222ce5cbb494c1c1ca86d18c6b42db3d181af9b7086cae7ab83375537dd3906997625852adce000c4ade8658c90e40291b4f77a32334dab8b53f7934bf3db62a8692d219a35a48f4da24cc1247ca96ca2c998a03765a913884b58750629bee631827c22568850151d93e2e447031d339e2f4e4827a90d418ad2eb0549968d769a53c95184329070390cee67ab50d38195404c74611d36ac7bc0ab9a139d2ae5e103770fe2326c8fa3ad1d8766f591704f10129bf95c3342e8792384f373720e70cb78bd27d43263c1ca2af403634ee898ff5e0f2a3126bbc86117cf1e2938379e89e41a4953471a4ab690f10559ca5d34cfba2eeee417a97fbe7678c45888745808fc4d2df039115acad2a1d107ea65796378e4e28e406ba8f1ad8cf91584bca5c3f74a1a4a839394e71d86d886ab9ac2ded0965e7f69594f2a7c464c4d205729c98aa6c5ff846354421a2e8fa567d7bba9f93c6a03f22610077b26a1a6c415fcd2c1476b5b02caee9d69052d39ce13dd3a1d77575328def84b8b762527783fd480e270dd5b721305168016e3b3e6068739a4479e1e128022ce691e54ad8fa9c2b07756145cdfb061d1cd9cda6930dbb348bf0215abf5e409f36fe86f54b88235da8591e16f2b78b1f61000c5c075ffa6aa958b1d2804958734a901701e69df559981d1e23f69fa6b76f3c9d7c59693503e32446fc13c644c3a3a1fe32c18eea25480247cabadf35cb149d0849b9d5f77b3f9aec60a69e20df30cbcaa842039e7231b76fbc617dddf5d67f5744316a8855a088687b904cacc70b4aa75a021b4000bef977ac55f0674e33d1aad5bc06926a65aebc73df9ed83a5bf738c12fe0115b7435174533cb7481ef8811bb758139d3b2eaedab143a7c75bb7bbae72396bbcf5806fce39f81de0bb7ead5fba7b855fe9e38c6295f8306d3a45acd4e48505fef0bf37644c056f12745e92adca351f11e5f061b2d52b3077a9bdf8f95433b5cc7047993dc4f1660b2d49366a2d37f129a3694803dea0bfb2f6e82cb4b0ad6fa9d05a045a637f15feb0f4605dcf46534a96f03311f57db017d4a0471dad928d23e0dd3f9c3fffcb72aa72cb5911089f9ba7f5c8360703a4',\n",
    "               '7c05d538d646806a21ae00ee062b4326aa3a2a361035c892f39b0b6c1432947a6993c1322eef57a801abcc6fa082fdb515e7655860fd9ea207a83426d7257d275a02116dcc2ff5175902142360e573ac54f79ed69f1a09460c515838809e549b627318268e84a37022751d0f9bdb099af40dd7883db56ec807fa1d1b03958d4a00eadd9bafa1dce5b35137ba03e947bc9aeb96bbf9972f94b2ff4daa9248852c56efbaa128489c88f53ab48edd9cc3f23676f6e2c3be0b8247e241d3ec3f27b42e1406340eba0b407a0f9648063c7aebd167b4a2dd2796fee351018f458a0cdbfa45d5198ba94464190751a033ab9233ef4d3f86405edbab9919b85f775666785cd3d0ad1dab7d004df04e8cfd7ff3f23c9a418b0ff3ab907379985ea49bc2c5ba0741d1bab8f1a77376363154de29205b77375ae818a2ad200926ba791d0945c7b8796666c10f30b1b63c21def30ff380962e6d07dafa739341924664504601e0ec829f2c5f7eed9b4109761bd2f74b1ffef58245432f9c36f14462156051013be352f53d6eedf9536f71a6371dafeef63382c37d803df524350d1e08cad08486e77ff64371c026cd3e6c97e3993d5fc1697399ac3a1246e6e94f6792cccbf60e8042dcbb50b5a32ad68b99cde5e958012c3c8c3b6fce1a971e12acec4e4e7386a960f71ce0af9c61cad7f36f6f90f26921d6b38059efb55d6f42e294d223cbc28b766064e63a218bdb5a3c9bc80c3d1117d684478aff3dc2af031e819b2aa15b75196ec4366a52463ebcded9b84f38621cc66f25e31727312fc5f4603078fe43e11bfcbf14b2aab163e2a0815b7a9a52c7f91ea2ce1d69fa8e8fe52263feba3dca99efd8b444c88a2ad65376dfbbd5dc67617dc9b86653d7cc805f161ea3c414512227408e0fcd3138aaa3de53ad68daef126c7562bf6eccd91cb50aab7c1aab0397dadf459bac63aef2ddda349a013e83d6f46b915182cb8be99888e72a8d6d369d930e33088ae7472176e4883fc7f4f6e30a8581fa793aa7ef4d8dfff3c30e8d458fbcd2ff1260a696bc6d4bff4af129ef0fd7a597399fee52ea319039f61671af59d263804c09acb320202941da04a8c8ebca5ff696eadd89ca6a2102c13ae830b6ec1374d932e9076951ede5b800ea8e0401db6af3dbdbbd5ee296ac1704c0a9019f84d7a999dd786b2b45eafba15c054441161ffdaeb81abc365e71e86d9275905b18bb1d853b887b36c19e2d3e71093590789c3575c0e8d69a499a5742a05faa2e14e98234c6fb40d96b0c9530ffe57c7c262ed88addf6607667c9a446345120fbc02f9b94c1184725c9efc2915aa885c2ea326b40a5f8142086ee7ad18ad15c4ba424cb7b05cd8e1997fffdfed89fdfe89dc46c2a2f307dca10cbbd858c2e6d15b9c384bdd1e3fe688c3e26bbcb56e1c1562825c8d8fb26ccb5242414e32b97a4d097d5cb6cc492c674fd90bb06c270a9e728ada7e28a62035ae703cb3066acf46edbf7d8b1a7e7e516408456eb31467d9558a11792f214e80708acb90b9c63bdc9dbae617da4b193fd301150a23dcf5c0ba2b7b1843b4830584fde292d89ebf29b4f7c2c7ba2b9b3a7fe829f793e6d7a499c852e39006e9a765d7cd467bfa2fe08430d6b0acd52b338155d8c02f177bfba1b0b527bfe75085196884afc9114668d75697bfe30ca6f15624178994643811f70b23194588e1d088a2e7b098edacf2cdcb4167d42cf96fd35b95166cf51026a087e99d56bc70c3ab5169ec099db2b8a123b2fbfc84fc301f40f36cd4a953e3c34bbac394c9adc122d05a4bae56c47ab7fee4b72dafe795abedce2a819115b098249d75e2411c32dafd9a4646ea36076d934dc144720c5c91442bce1f882964d76df95afbcc7f5f83628203a863d30ae04af86ab39a5e9f32251e0389cdcecfca64848a5c92b85fdf3639feaab4f1de398c187a8ca93995ec5e920d8a15ae3f6643d12b6277eafcd9b9d752d171214a4dc6e3d1aa219712c2fc2c2e52f0d',\n",
    "               '7c0507237ee3da3c7c9bc5f389c386ad4fdf4af5c77368cc45359e673c16f2ce0de310d5d329e5c52f0c0ad1acada6bfa990f4e4be6d2f726de4b0c551dcf652b9ed2a785b3f817daa7aebe12ee13c4ddf371ea66f6e172cfd77d9695cdfb8e37294d5be1172aff13f50c5486ae0d5fa8e281311a0b7f09db7ca8b71da8acd24400fd183d24c2d244079e6d37cd7069f78537d2ea88e5b0894c21fd58e5d57099494e4bb6b3f598830207fed62f3f3aed27b9d01f0e5855b261f263292b99013427927da3adbb2af34b7eaa155567d57bcf0ff6b9431f1328b12f4395dc25bbb44bd37bdc7b43ab49bc0e1f9b7e1c9d97368c72269d162cfac5aabf245887171eaab6399509bfb516a316c98bd9ab83887e0018a9f8bf3a4498117416ea220640d37cafbac35217bae288a07ab90abc3053c78ddd4e5e9116a2885ac49ba5882bcdc65ec17987fc63448e86ade305535b5db62693c653380c8681dd44b09e9ce7026a5c8a670f8c337502ea5f2d406f2e8a7e84eb546a07b2d37146abf182b6aac458c56490d6b6f7a1851e9b5eebe70988a7cd835fdfc4929819b4396427bfde409a3959c0c8df1d3a2448974e118ca7326a4d64f2a8ad86b2a45fc131db7f89e4b43ae0d69d0f378a51d52e2608cd579298b6eb7f3d08eca22cdf4dd213fe13980c2c043153e0cd55e1f43f71c4c4e746d101363394010a0ec56e5342b02957430f0eb0ed14933d09efd1e20f1dc1edfc6eac84d58d26dc71ae473239237f9ab622d90ebd7567654c8add10c5b39dabe05c7e1cd563197d5823354ccaae7e8d5e5029777487be6bf00940cb5565dc7c6d8b3cf93e06114ce0664777181a4de7f402d29a125e851f5d1871fdea1b84bb8ce2ac1c837bd1b9e84c394f2b4903f261c4338b94f554178cf0fca61b9b6e343f17b443fbec25b389e68139964c8297674ae022f23ba5c80ed8786143c98754689dac234270a523b4170c7f90e9cfbd503e9f1ec9a479ed8c0f741b81d135560759c64d486cc813d6f99a0cf74b8dc743d183b2b51ab76a2414372cf1fa9332381f5956830325cfb2b5e013ca226f1c66bab0074a3775f978c53faa3e79b0331824efc652a4bbd94850e9a2c2cfc6a9ad1f270d944ff83e5efa084fe93ef92a20181bc20fac823eba0caa916a6a9e67dac71ddbebd197adfd7593da77bb014a09010865c03cae874b86c845170dee2f981c26b532749665135badf40a5e944ae80ed0c39571d3b1ceb114bceab0ca8157bf023f0f6ada09078e0713443aa19d9a1f3602b5296bf884f7197a6606dfb718c886ac56c83afef4c1ddec0fa0f96f9d8cdb27aecbf5e31d3ea91e1c02effba2a8446fd677f423c831259951ad788eb2b8dc5ec6ca44f97b01d534c2b5570b5b421e77d418ee567a96ba4d059f96134f4221a9005f19bd0b135cf807b3357edcec926e9de502818325e5f29aa9fa1d4cc274ce653daac22d9cd483f81b1a3d76cf0cf6196cab1f29b15601a5ec52ed12e86183b9bea29b7771dbf60245d9acf3c5a5d8a540187dab23c0c99c02a9991c5099d30a030d8351c2f1bfef8d2c1ef7802b8a7194425d99be2a73448430d3e5ffa507038de239c67c10e79a2f855204526b5976ac8bdd887e22cebd1a87822feaec63c1cea8dd9117aa67b7d616b0582091b2bf6408d04028816ec629e86bf5ceb3a5ccdd142cd732968d3ee43145bba0c02bef1f29f80c314bbacd66d933251ee436b4d16f35749e3d533f367d789023d38aa7700dde34b57f29d0e446cef47911c61d2463e73e8eba315df3b7b6b20ebcb59fdbdf6958a29c588d0dcfe17224801498c63fdc617cee5476d22ed39fb7f0cf737cfa390bc371b580b16204b720b6b83bbf6c74b0ff812ecb6d857a6b3fbf1a0998d87c2eded959b8b778ec33a28c8a8de89947f6f5673c5a9692455cb85c94ba9ed26337e3033df8d5d564ccf23909169e673545f98e0755e09cbcf0d0c3ad8eb2b07907531f9df490d39fdbca2a1',\n",
    "               '7c05518819b90a7b0de3e9f327d9bdfbd7b14fe130a80be5a5a1939490a0e1eb86624872a964a5859db7c9f49f27e59679dbecc4da8c3a1fee86f0b6e4d5fb719d076a585ffff659b8db1b17380596669ead164709daf489bb19a57c1ae75492291ca2ace50a5482902d59ae460ca97c2a3890935fc9867ab0a847ba640344d8eca58d280a2ed51900f2d8c98ba80de42bb512cad62733c034b3fdf7f7085b6ac733ff0e1e7a40c8c4ac8d3a772e79a5aa9c4bec94c9081baaa78042c68d3b63c35583216132044225d0cbdc01a17d7a6e33c297b11fc3a851b43aa1b7985ea1bd3f07bb4fd5ee291b1f2fcb5bbe0d9665c91b5ae510da9dd5baa82082e9dd4908abbd8bcee149bab9dbb4c29f9e360180a3079c47d32cac29f02d3339ec6da3d679c79bba6cd56cbb08c3e7456e1e7e5d6458be651dedd948b58da7f0c44d2f0e0d175172c30f819bd3a5a32f6bcf138bfa294b04afd24c0fd3b8bf038ade1ca41f4e943430a7963babd39e298778c03a231d5515fb03bf9530ec801da76c241105885a4065d7121122be8e1ffa8c6705911e73b5ac102f1b49442c4d6b9ed1ee87c60bc1a78590109f4f658607999b94207d12742e10795c3bda4156a27625bfaa3aa14783e8a92874cd29fa7dada82061937622a4840273f98d01506c15bbf26acabdf046ea55514366965f32f798acbb92e4dc5f9c69016c0259ba280c0dcf33a3f3c047ebea65faae961b361a60f355e3e30e9493e00540a858a376c31dc3f9568e48473f080f634cfe24b8ffb1fc54a5b2197c319c070e1b80bc8aaa95295482737f6a1347061c425b202a35f1aed4c51716b38e710eacf3121e2a2a6fd060da0012ba12302b7806e3f479fdaf5cab7ba5c8504cf1b71b07c372a0b62edda80c4b5ac2afe4515d97cea3d92e41fb36babac66e748871d1a6816cca428067ccd1af6c0d6c6108602953369a37a9507553a064b65de999af70dee3b8a913491b1d8654ec21d8c05854c4e411d0f5660a40ba5b4ba2c84b3a88ff0a93c6723fe53c5e0b4f9a37b6f105f8a569781cf9401bdcf8d3ec08022cebe9ab55b9be505e8d6352a552e60c2d62572f83f3ab1d5bf61beecdb1be7c797724b8a58b32ca9c1a6f6657b7a34bc4d5e8812e9471640e30c93c817e84bcaf89524e12a734b9b54d7d9e94ff382c7c217c75c24826338fedff4cd5cce53dc183b4f5d01f1bc581ba7e78cb888625572d635c8c2fe56cce9d6f9872f348215ff08e1d2f91f59e39374c3cef59386b1f167bce2488ecbd15d3b6909d33da556325816be73ccaca8219263b29bbb8305e709296e05dac8f54a44d9689cbf9770754fff9a0bd5ad3c952fef3b8d060c13570d7c61374f988644ab3f7fdf15da82652bf21df8f026468b53f09de1b9b3b644397fba642c55a9b96634e92fb99a1b534f94b3ab33dcc7e261384d4ea06d1bc2fdb202debf03e9e73acc92564df672762115b4add48a7d745f5691b3c9b33065a9899047faa9d9877474eb24ada7ef57dcebce5d796ced202d01d2f84bba41d64a4f450b8bfd7638c685f2252269103fd1cfd097bd85a5f35e85d838013c69dcaf577598d9d991bd473f92bf0fa49571596a38c8be198485650f533b2a741350c5750ff0a166e698aa2ba08498008a76fc3c37c1b0897e9cef2c19fccea39e7f37cc70081845124149ef5e2e8215b8c1f25cd96ec4d0ef9643b85cecf4b3af42b37a03dc8601ca5edffb4b33750f6ecb0274d734eb84d0334f6825cf7fee463858335481864f3dec67293c6c6d985ef6d515beadbe51da612fe8358f503c6d0e14b2b6d49f5b7cab8098dd4852443a506a3a41472d570ddf69bd2009b6055bb2870afc2fd1e6579f88c9a4ba36acfc623db17cd171c5716fc0ecfd093cf0d3360ecd7e48400344c2665907a4b029eb415ddc4c11031246ae7c4cce0b27eeb845d85503067d76dcdf735f6f4ea53f84d8c607ed8efab6628ce2f09e93ab3fd21ed168299d5586a7c98ae',\n",
    "               '7c05abf50e42fce4340c1d6f016d90b83416915a841fca228c89cb4c93040a2797b7ee189109cae9ccf06118b84684c999d0b2b659e9205554f30b3a20880f3853100ca77d0da2315026fb24bbe1f1da180ca4c9a67c05302a63d32bba3cfee29bc080e5a7fa0082aadd3a70cbaf6dff0484999d26596fde947d54bc8ebe8344237d93876aec6cfc46cd080070c97fd5f3a1ccf62090f1bf5a85b6e4e89a5fbc14fadfc73120617142a8b31d256c7f4dab75eaa8ba31741713c64b98e31ea14e9a8ccc2508fba0210bb67b4b804046d896f0cf0945e96301e64f672fb7c8d4798c7b83711bd65b32352716b51af00202ceeca98c1d5266ad2932c37d31351de28b839fe56c22f4c0df9fa4abf1c77285567305e662e2a43bbbf4deb28e08c37d9fbbcc7cc25e487d05beddc2bee901b28f5a424bdf2b71c85e2fa5b516b5510760f7b5403745ca70fad39b3540840c3706bdf782bf205be1f2522778fa7be1c8dbe403813795435dd5f8e93599b814efe8b2228fc4a00f39abf64d2454de7ad1893d96fbc3c2f758ea86aba1bd516b30af7e001bdc42e855118e76e5df44647e13e811cf3baf2bca230fd78b3f882c02c52b2bc09548b18808e33bbe834a45b4f443dfbbba4ae9ebb07d9204a7b66c5a0b0b78e3d7aee7d3fa7dfdbc12f64014d4769dbf6c5832ff80b84966d2a0c7ba79b5bec6a33cac3a8838c62d2599e89faa9442a61e2d95133c5c5fe908e060801b6e1fb516bfd5e4e996e569c25ad9381532fdb7fd32d8f2039a0db6d391b2756f7b2a1ad0485242876f93814047283d4f51d7c2713a7690ac178767b6e56554973ed04a39cbd49a9309655cf80850dc9b54da92dc5de96c010a6601c4a460fbaf1766a101bf07ed9e5fdb4002dea475c8ecca119ca90db5e8c74c1bd1a16de505797768b45b7b93a89aae5ecbcd7fd457ed00f1333f2944fe3ab32afc00fae8d2491a2a9c3c031c89461e64db1cb293754e7808c69df23d02117bd170ed658f5479b97dcd4f1ae3a19d44b5cbf344f8823c40ddfa5c424db167f518cbaa292d9e066a27002990246597fa7d70b02abefc27b7a306c866041770125080f0e3bd82b7a45b5aedc75f3e8898f7c558a14585eee7ba6e39df8e0b9ef5c44e294b270f165086a2e284b815306c064e06d2873cae2d6367228875c44040680fcd1bbb32c86bda49fc134996b9a060d06115d941c53aa4aa15f8f6ae5647b0c82a94527a6f9ecf5d5bf203024b5a7f1e3c18815d8f50cabfff37a25903fc9601855b2497f6f5cdbeb533829e4d685796291f0824607cf358ed7d9a1c3e63ad037470039f77c5502e5e14bbe51dbd059c8297448b4ae2748535ad63e0178a5e7f7534fc622306eebfb932972d0de36082a26649e0fdd6ffcf09a6176c97d8aad05718db9d41a5e80afa8d0639fb552b2ef38556a546e542b98fe780eb9f9475dbb61b86254b22cef4ac3d3f03c142925e08797f388c205f0b3f9ff4214d875e11832aba8d40b07da8bb97c810f0856b7d1caf8b873d47e9b6294cd948242451c56cdefc68b2e8633b861017318475aa08f2e39804b656ab55a625e42fea992bbedbc57b52e55e188262ac2f9f8f568e2f4c3bd29204d2231ed64c9c6f2ea816dd0e935141513e01c9070d7d9a229df32b04280750ef25edb5a65651551e12143e320203c3e96c4901c38491afb9359f7887e8ba2404d3e64bbd5509c2fcc9efaebf46ff0cc691aa3bca83ea1b3ec288d118565fe997edadb4d807c8c7007350e6901767fef57707b03e5459af57c4986f9b1a317559d4ef8e618d697d8c02d95e7f3c2dd8d19f4c1d9d5bf1422808298c77d67bb6dbbceeb3019e32a9a86edda8b5c1490f04833c6230484668470f8dbcaa5ccb69d95754f5122e2f120abf1b2320a0ff50b207a95bebe8a76525db18049e57bc4f6bc3ba44c4e2ae41cf4855c275b50bb3725aa299c834cac95cf207369bf5907737afaadf2877d278eae8694f24b54490b3e168',\n",
    "               '7c05b7bdf416427041b0247fe05c8062a08bb5b35fd73fea7ca7ded454637da6d0e73cae6960c357e428339849e558647492d5b89512ac860cdd941ae6405c5a741f0aad911b335cc256f82b0708dd01dedafb5eee13bfdb2a078502a0c2635706ae02d52b799e670642618ec92ef8fc8b8ba1e43f3a432f1ce88cbb7fd7053376fc32d26fdd51913285e4b217f55c9e0f1f394a003affbc14c0002b8227a9046e7cc47ea35254a3b3e4ffed5e1d2f895f31fe8e31954463a8e9c929bbddb0ab652476b8a19fe7c257a29ab60ec098c8dc744b011a5a8b941b3f97b15f2f18161a79393e7a625ac6d54daee7685434f739f9949460d595e4e94e651dcfca30874008e5bc72729573a013cac526a94e8c711e17e8987ae9e9c3f5df95abd9c2ddd8ac76436eb8bb708004bf643c826b0e8587905169caa5ee82165ef35455f1065f0880355c71c4da8f63fb7ba655825fe0cafd8fb4f6d4d5c20005b40b80faaa6ed2a7621f1e14068e9ea0f7c93d2c1147c3978f79b88950c17b32489db06ea58255dab33bde05bd94fb0d8bd878941c09f989d44465e3c399b7820babbc9328040570636c9a580f3def84682a53cf5a8a008467d69b97b55c1c86202f5936f14e753575c2a79d51cfdb8793afb007f64e9e2a7e7cb032aee75e853bf11fad3a9b9bbae1869d1c93652a35da46a15f7965549938ac95f619bb60f6dfc43f46c88c9cc7866068d4362f3d6be85d9c71ce8d9ffc07bb9ac8abb9540756886bcbcb02f1867af815176f844e68a26bb9deb2628b1e7124bd1c213b5133172cc459af1d6c231809a3e8226556a77f80499635f1cf9c9a2fa75994e9f10a9c47bc6506b9fc64a90d753aadb15e160745094aaac01986661da43cb6bcd99d404d85e6fefb666e07b8e2d446c4f46ef701a717b257ce8eb1661454f359ff8cf6b43033b1cecd2dc2637a4fd9e93458d6a959ec46115d3bfa4989c479f4caabb2ba53537be6ae54f4f03594919420fdb3abc84927ace5c4910a301f5b9ba9376ad4fe58201fc35ea8e8ad54e84058d3d5a1e25d7a4ac2a355cd40a2ae6a993954b67b8b888dd8c215f1bc9d4368086b740cbad3148f72534793c1179c68c8d4db037ea391bc1b6fc9951f7abd4a57895e543522482d6c8eea2dd5da5c31dd2654cc4c017ed3d0bb0a8e10462d7a59703f31caa5afad3ab35d2c1a6cfeab0937eef4317f761a81f82c68acbf9778891dcb89574e0ea83e1cf0acf32f90fceea97a6a3fa0d963a87a5312f77cff22b00378016c36717422535c67cdbba804b274a9f229fd6e848cac33c38d9a42c2b6d448539650e5ce8eb92372d8c5581ac54066f74d9c5b7777ca48f995eda000d0fd8597a29d5bcbcf74321ebd0e3008af452dad6a03b45b07f689b4b49694e8f28bd6fa1f05489119407f87af3b00bb267e096f95519181dd1d670a44579d3e92e40da367fafd3a51933ef429efb9670692bbc1b8972c9ae7c809c26ea9b41e0050e49465f53ebe1966a0e601bd9b892d30615275832475c202b5571268db1221e86ffb1ff7941bb433c8edfd497e09b203cd4a338e79dfce5cb2677d0636605c4756b533a324e10ec61e56fd153b81b60813bba69b3be611143fe0aca1a326f57bc3f3ab8345f6eeca90cde3e405919fd86371ff0bc263f61be09dfb6ec1f94a82b27f928c67438394aa0c48e929ce4ec204bafe7c054f1ea750dfc33bd9812c5695d14766c42ae9c041625139848d2316c28687a22385c7c7e9eb5f2be7a92bbaaf6fa881423a02a1f66bda58eb9fd61641d4407588038a5484eb6a116866a69455c798b44324116386b973df18ad2bd8f8bee04bd3f7275bae9920c79b1a6d8072e7403596c6bbf7d6e05d7e4074fa682521a28fa6cf9bbf9aff0bf255e24d63d566b8e23b139468d1badd1f39542539af49f3f67000a4bc9d47cf6141e4840dccd7031ec7c2e831e8a1c464c36337ab2e29f315fad88f670acabc29228a1a9c5156eaacbb3f4f7307',\n",
    "               '7c051589449ec21a4f6e1d9d638249489872f9584d3f30309bfb4009ea6156fa863698daad9ca3e49e0a53902832f3edce0a3a0f0dbc7e5f2f121a37c2ecc6c1899b9f98e0b7b6b468f8fa80734086fa36c0e694338f5ebadcbbe1fd7627e732c645913b9e2bd53536d589d154329cffec141e4f90865eba0269fac032bfda519bd3d662800f9a57930d86a1dea0e866227082d95c62253fd2f238d6d318550632a23ecc16c10483483522a3769cac1dea1e368afbf61ce23af5dbc06c6000406038d437385eaaf2ca2d34554cb922f26a8e81ffdd69b9a935ac81cc79176707e061c54d9ceb4af035ba111748832e746cdec69c09f237e0b189d45400fd0d534ef79801cbc09573eaac2652b232f37ac0d42ba8170332cbf0441b56285cbaab4606fac8c79ee2591502130720c80318d705cbf701888941b1de70d8a4f3c4ff871fba468b74d5a3ffaf80051971c4e59601d1fa47fb9c766ac93ac9aea2438f01704f9850cb91c369b7bc82c875e59328d6844bd9a08d511e55f9ea8acc32be4c993fe021b38335fb39accaf068445adcb242d7fa1836845dac26718e8d29ee3d2498a2ed1e4861a2e513cf0ab31261a89af20fd4a8ab6e9d8cd82d7b55d13adff0123065f72b2ab633e704324eba7a85753388ff763d38e08d6b7dd05f7371addc67cc13a47a95bd95dc12298f8c73732294f4a7ad8939c1b36a22e32ff33fb2728d8f666cb0e2b2a46ce4c7866849cc7022427edff4aadf475f9abc8569f54ac77a5d5aa1bb479fea878312fa2fffbcee05e12d2cb55395f78bc193150816457a66d6f90ed733d955ec609ddd115173f129b6dfdbedbd0f66c6e1c3e588c95030a14f95911f45169b764378e8b5646acf47e3906457c0329dc2414b0c2710102062f34f55c271f3203f20b47f64d5d629f19861a267be6ee19c3e2b624a30fb362cb8790959f8ce70b617686e40514edb0de2a7ce82e7046efa383c9e535614788ef64eb2782c1b4233005842e9885012623cc6062f81397d2dce7ab01bda4958353eb08b720b1b3bb0126ed507d52d511dfe8b9edc075f4d139c0dceab16fd770b2dc0e8b3f11dc62d9bb86a961c044bdabc50fdfef53d31005fb8ede172e2562e25214d4a1c62ec6b05b9e7a3b501de89bb7fbe3e086507734c1c97b62b385a71a3ba27aa267cccde106d6820420c7b178746e1c8dfe797f0b38c4e4d2e61569eddf61036d0ffa711943671a344b2fa4d027ed4d0eacd35c967f0b99b714e9ac81d450e4c4f1e9243ce2f48eb53f7bb3a3667bb577d8e60ecfe7d314338634ad6d6855cc2bfeac83692c08a943cae15b1f240c6afe6e367311b13ac1b50e14dba1efccae123da439efd0c21b55fd631663e15c3372295b3b19c53d8a0560c3af97535236ed5d4c907d69a1f56c697d8d5a0c9c001624cbde083dfe257359ffcfd899e4607cf41fb84fc4cb85c8335ca9d1dbaaa430e83d0891cac131e486d3fdddbc5be001684b6458e01d6a7bcd9fac2a72381641ab8a0ef70e03e78ccd24486f1423eb3a247a2d1e0acb2361e8ad1b52e3bfd7cb5d2425ea04575f065f41e4f7cfc25a8957f8d852eaccd83f54404fa89c9345353d587bdb1f2e68b2fa2a3aadab92c44e58567999ce03615aa1cd9b3ec281ef15cc470b56a910df89265c31894a4bcfa66a198db1f6e36887443de987d2599b356b84f3943c067036035c20f119f4c4f5faa275e8a2e6598419a60f9200a778259278842fa77739bb2fecace12bb0c6ff88801ec4a260806f5a6f3fdd2551b0959c09c61db2cb4083eeb2785055d6553512fe3c9be7e0e99e762705589506413643215fdc70988f4f3f9e754fe9b33d12cd74da8b0a746e5515bafc2dc28dd3c0182865f7a1539e603af436e2168dd602bc82ac50ea02babfb6ec0d435bff4622abaa84241237f3fb2789e57c838db9ec1960df78599ebe06f2c44ab9727f3a0a07236569f517d7cc61fca3e3a3bd4aa156f0b88e18d2eddca58b95794',\n",
    "               '7c05e2938d7bdfb201098fbff4de7c9d6949dde8a690460e9bb6178468b58d97d6149998252f239f6409705741a1249cfaab3aea2f9b36c267bc7dea93654d877aa82e155817fd423b19c0a069f6b5ddecaf9fd26596a30cba7bd460b597b1f5efcf984fe253c844d0edd273795dda8fbee41743e88c1763e66c4182df07528428f51fd7bccc345386f2de8e98b51014c808e6ceadc317266758a0f1e494a3f2dd56974311738d2d4a200f04eb0254cc34fccf4ec742b93dc3ca38e34883894d7a25b073d69bae35fe6cd1e43e4c8d4558e4b38b961b71ef5c8d074752dccc3f66d78f0ae52d4b20f4bedaea98a45035bb05b2618b10cc9e687c7a189d110643813ea9499a0a85dfcd52015d5b4bda336a1d6a46044e2eeebb4d6956e2e19a8f5243aa5e4fb84cb5fa0c48148dafc4fd79ef6af9fb381dd4e4d711636637df5027c34d573ea9a1612d16e1494301a30b5eaab76592065b91b32149ceaf9fa6c05341db70f53d37f7818f91a8dfbd149a2b2b653cead39e299bf2e5c782fd049113ae9acb96f19f9b62763be8bb0dbffbd398b0de8059ec280569b5ed807494950743d1937fa1eeaec97fdfa2efd7ec15ba923da8f15d3a121b769c97758fa5e46b666b2fa586fed662a6bde186145aec444337216baef70e56e0b4e8b2b1c7366216bdc96ed91b4139ec4d07ee8829d53a64b97f499ec701c7f3a7b294be2af264f0bdb3e7518f987fc2840a77c9cd1b24610b4f95b79f380f7327764b5c01a736e35ee3c6887d80b4f38cd4c9292668b81878ba297b80c86234c8895c24ce5f98c54f2bbeccef9a273b1489941c69b4aac2ac8b2963795c51aafe090b7296e844e8d1f3882b174a8fd11c5db27409e2018d468f7374ebd9986306b5e4e315f3e46e037741e586810e34768c8356f0e7abc2b1a56eff0eaf98b04fe4e87c50d59954c73213bbbbd5e083f255d7b4a70b092c9c071e9fcdcf05ffb7092bfa8baf8d511d45c3e6c7afaf283a7476f949609c198ee04a2b947b653675eae8147b059d4a9efc52a3f103ad2032770d85141dce20e8080e7259edb5ef0ac7805755358a158fbf9878de4f230f8ac8b424337a4ea4f9fbc01aacae1f979fa3a89c88f56821a523862beeebaf3c853a50cc2724ca72c3c14971848f47cd30f55b345c6c79d57b96b4022c7a8ca518afe15d77a6d520e516632ce92d1e548695b3b29a11c5607c1d9b7007a8b7c1a710c351790ab532d38829d7439c96f11b2a313cccbaa3255c18b84e603643715b480c2bace1cafe704e190710b9031ced56bda6456a278fcb9e06956cb15f4232ad3d92ba55d49af6f7afcd89885e72f1286cf81a9a14014e4c0fc951b60bfa4b0505460985843744c532033c4429081a39caf78a2cb58adc5fdc5f9cb2709a1029c3ddb363608791713c3809a18adc2c15cafb8303f34ea06066203e4c14d07ae846ebb2dc0beb070e5baa0c392e6b1d5c6a7191454030f08520d1d444c853ff50e69d4d7095a4a3d2ed60023d1d8268a314aa7460f1ff4a777d679a1249b7a917abcdc6b147fa0f82c4c9e40401eab680dcb84ac151db729be2c0b5238d639b6d09938cf89c5e673911e7f2245bcd2ed9acaee1551cf4f22407330fc47cfa7c25ca39fdd7fba5ed4707b81f858a8bbc1fc0ad1d82830ba833991b394f270fcb440c133fddd64534656c029a2b500a7ad86300decbac91bd92caa87edad2d37b854f8f085ae60f2f4535e46d43e305856549cd9e2eec72252ba04e304132987c39a248d0c9f6ee8d3fb437d61b7301e94bd3027dc8b3107a5ea3b7012bcb3fc2a0227835b3a9b2492caed8b9e93528fc775334486ab379d80bda8b93cbbfd3a4eeb88b9a30a3db61dd8acdf56500cfc59a83c2a3073a9ab31f633cc4855fc83fe681c8c5b441296fd97632df5369e682c6bad044be6ceaa2a98f23f09e0c594410b436dbefd475f836dd75d6f571f392dc83cf902222baa521f65e4b2a1697931e43ffc1c2bd81c5e4',\n",
    "               '7c05c0a385b56f131471009d86523e88a053742840972254e2945578f0273857adf53305380720d358643097cba863566c06dfd2b9df016d7f7d65ba9f18436e9c6ded2833d9d0b240349ad084981b8d6c2a490743bec6d45ab9914601fd31b8d5df1306f85aa1d2e110a57dc2df118320ff210e162350f081294ec2862e23b8e91961a08e64749b6648f6cd96d14a91483b630a321d00f164a47b06a5bfc053181d13bcf693ece046b07b59ec20016c1f4acaeb61c74e337bc4555cc5df60abc6213ea2c3cf132321d2fc2c7c528c3d325deaf501ebda18c1249b5b0dd7568ef49699760b8aa2a4a1db957d2ad6bf3659d6279e5b553f8376b04b0d158e2ccad47e076441c1dc942a0ed0577c6f0cf51fed670f8baa4dc4a29aba2d79b675d36452e2567fed23cce5911b7fcff6c6f25ae18e24ac91bf116d20094d21968f7e1f766c4d847ba5921f52bd4618fcfda2306e45f47cbf4ddbb7484a51fc00ed2926173f7c5cbc5c7cddb1d00b2f17d43bbc7f2ee6b99249967428459658adde6c58b472d517c3bc58dcb6c65dcef9846b0ee1a38c3ff6655d900413bca2d53cc0fccb96ebc48d84c60700267b307ebe4fb348dafceb161f99e0a7642f50877f48aa223ba05e1065be0c0d72f379bd7a824a5c75b303912185c2cc0f628475a69f59d9ffe483a384b06f177b84dca5041c83ad21500b698dcde68f96a7c17195d00c5b3190a8f72b664c2fc0fa46e89dca8cb4f34eff6c3dc96d0c48799d20308de7ffe1b6842df03a27d69ec4b4686835509be605a571c6babae6d491be8180781da1136d479427f2492801edadb335edef323c64e522ed3dab0a363b78a9422ab127c0c1c2a6e45ad487a4ef500d1b88dc9a878aec4761a8da82acbe96caca4cd4173c3f1d8822ec44f202ce3fb9dcb8f1125c7eb677b54145e7594857df09760c4ec162331f2888369f256d792b401209899ada609e694fa0ea49f730c25849bd95bbaa19a1e9c746f45f7e77f3d0a44a4fb2e433ad8870435edd998f09753ef7b7531b8035ebcc4e52679ee7d9f70932975ed5d7814c8f5605ea703694b26d5d7c747ba8100292b5bd5d6f76095bc7b21ddaf37787b352dbc5989bd8cd0acdb87f08b85bf90767b168e1f101ce57773bcf4517bb45ff582499a080e5b5428cba691e055455c1b5bf9b86019ec6352622f7c405f6c57db6bc5e79081f8be01d1bda5695aabc7de4b44ae4efd4da12a9825bae0f8eac0cc473c927b1e68d57cd84c0e09d3275f0d6154c451f61188a4239ffe6e445a8a590a98bb0d44bd8068bb122361da9d8e603a271cdd9a0bd3a4cf0595fa1b68f88e62558c08e44daabff2fdf499589de889d71fec8d7bab71a698de717b2fd0f45a14de8f7d858bc85af49052d5ae391deabd66349ac0bbcfaa185b423e83e0abb05b43a43b99e52021ff6df919c3ba14a232d88f6c99ed969aee7b79e5e949187eedf5298a136e227884795260fb822e932bbc69c9396592c4d77172d145a5f1a36784d330f3cff729f490d9623d2fcee7327fef242f5681cdf4681043e92997a617db9aba244535585d5873241e0f35977d5b31c30343564023b5de4b525f8bd27158cf9b2a35c285bdbb7cdcf981c31faadbd1042d9a4578c8a5a863fde2d1750ad295bd1aec80b6afda651f40f48ce928f4328600b255f70582c4aeaa1f671c058873f0604a17e762901da3039e7903337313564448c049cae5f824576d9975f10e4fb7f0a08d3699a7cb13de9fa60aa0722cd3a52ad5b639aa6d887af10cb04e65557c97bdcd4bb9e127c69cfa745ceed1c4c0ee61f1a9ef8bfc89278bc67e08fec986186328b06bf4a77501a41aab7d540a1aa526dbfdcca160f4c22d686d838d0e0e735fcb677990a991ba04f54e19d1c4fab82f1bbaf96f4c821bc42a7ed0ff8c5aefe8e2c3a4e10e4369d63b70bbe5b25f1e4120b9b13436a9cc7c75e3da47c2e7c18521ddd9fac8b9748b184087475f9ff59ac3f66b7d4d568',\n",
    "               '7c0592df5a35bc0da106ed55b2e8193c49679f76eaff0ef91cfcd3e5ea899c093c1d2d22589d310c32267869dfc60bbd2dbe8970cf88dfc828504031aebbba700379daa321f21d2183b13469667723f96d45f313a6e2b03b94c2f9ac5b9f5c7972ce7de65d622b2da0de6f1236f3facc75c8ba48935ed38c6f62ec8d6fd1173c87024c417533b88480a1c51ea75923d8dd8645bf713105a78852c28ac9213a7f5d1ccb81957aa7dfb1e3a21a4855015867838c8153300ca8b90d116c8d8195dbfc5ae3c80919dd2c5af7597e154be99252ac787d301ffdcad887311d056611b54c071200932e93d37d897ac0883e941ac907dc77f94495f4104e3bce2dd12d88e17b894434c032e83181707eb1062b15a35a1afa3d6a1bdaace7a73491afb8e7535bc18aef3ebf3274bf0d586247a58423d67a8448a5e68a17f6b99bf227dc61f5e6a5ef89445e93fa100346cc37fabc4ab70cad7202452e78135476a318306f48eea1093d838db9e8c3bab1793e05d132cb6f9e4e91a925e40169a1d993984663a47699501f916489793c52c76e08bd70ee6e9456ef4fe7bf996e43f00c5d5b56fd411142c306d6c036d3395ec2005934988e47763ef7228c906a6e81a6c67eb465de2745ae0c8ad0e38f71d0fcd26fcafcc659716052482a160cbee9a1ad62bd17f558e5bef656b1aaabf4f193e70c1d23833f2d0f226b65885a8639001700da2fd818fb5faca6198c897cfc23bc7d26aa540912001987d593aaf5b614e163792e176c5fb7fdb70004904de98dd4d4c0f37d15d62250137e00fcd53e14160eed0570154140c758d74712ef6cb84a7c4d78dc52abed09ddc2d1195001a3be8f82dc8b30ccc8dde85ba54a4c5cd946371893df7407ca805239632e03d696426f89a4b9957638e413d0c8ff1d91aaf909212b2c3a088a7c5ca2d019a65a20e3b991c5e9c7fb1c8403927019c636bee4b358a213430c2c093035ac43b22a2ece76877c525410a42d65c89ab317ba09715b3c748747b1498d2cfc13c559086538dd9cd3ac516810232c4dfb87d4aa32795dea10161f990823962a5a6a2c2f78c2ec1dea9c4d78916df3e851f3bfd846e4997805253a0643a013790bc39f0b625d0d406798ee09cda592395903d284ebe833bded8df957cab0e73459904bde2ce6983d56ee78b04fc966f425d957b158f9ab367583dcfe0f8432e0310cfad2406352299e38817d45f4084e5ca89ad2c3093c3aeffa847b8d397f007c92af81e5cdecf270c4eb27c6a150d19d582af79825ff002e70c7f06b1b3cbe6d540e038ff1a37c9bddbe383e984045a42a49f77060d0962ef5e2951d58284dfecef85a52a377c38d917d97ed9f60a11af89786279482bd9fd295a9680c0731bde759b25220d5db62d896c12c07179101d4bcbda755e149e4f5e8aa2e2a6c0861ae3b2dfce237a105fcb194083715784b3939c23b233ff5518705b99a81dfcd97e0381c1cceeca7e24202b88cd3e78c4e622e2e7ab6c026510212846b09650fb11f9245e9ea876dd421deedc16b0233c57edc7c78ceb0a790432cdaea8121d009c744840cb9dea9bff9678852f8fb200ad6ccc7465fa9d3a014c92dddb47e886ba52849864256bb5df80a6018e2c71f9ebb99f96b80f4ff62fed934094f1d3a7d3709c895ba8dcd47543e052aa62b9d71dfec8c045e74a8b781d0a0503c9a60960435aa1ebe0b8a338ec3b7750eaf22f87b9e89e008ade33f832c3ba25652fc0adc378f4f263bf69cd8103042c40df6f4ace08f130595e0943c23fc0b4d631bb657def5809d490ce4ff8699e63351ecc8ccc9ab5db38d68cd270a83ce1bca98482641dcc8f854e462cd933f66e9e1736c048527c829e67efccd2e88cdc7e17ba4f84070402532fe7289bad62a94e3ecde089d8da0c3c609e571b285e58d5082d1603a6a8ff4a728647081bc2952e7ab7a5e527d62d8d296a57fdf2620685a65b5c7164fb251a13319b0639b358e0aa1b91a91ebec071445bf2aae',\n",
    "               '7c052c277224f41bd342ff4dcdd47cf20100f7214ee6a4508a23781943f41028552ef2632cd47ccb85be93324ce86f2b39a96ec40e36d9761afe69f13d1b904d5cf2aec4e204e768e9c9e4a6b50b94b702a5a1d0313d3cc7da5b0397e1f9889217b27c5bea68980d87fbe79314ec2e366aa097591e2f53f99303f2efa5350fcf3022e899c9d1325b7c2c83f2894e851941e917676a307df39f68c477284cd4f2a623307b408f06b06a3b7ff97105384cf26cb91363b13fe16d8258fd7ac487aea9a74265b31ae140743b24c5866399f1778fea98265a971fc503515ccf2a2a0e5936d4d9adac6a506996448f6eec4238b197102d1f05d7c2cfd3f6415b831ed8bdaed4add7d130d9e298718604dbf4d981c438a6a56fd5c92f4104ad996183dd737600d9bc87286b3905411b942de5d6c93ed0cb4e8877cc5b25879bcc867d08004700b09eedf475271ce7f152ed0769f7d1837e1d5df9a39a80432b7815c760e4137701bfdad4172ae12e2b373e3ed1b304c2076448cc2f63ba5858b4c85348bb39762afa3eb964e97a0f33c5c3aa801fe22ce6398d67be478a59fa920095af1359e0ca6430f3fcd2b1a46719e3425ddcdd771b6a551aaca8aec4fbceec31e75a8bb0bf2ea4118652f91c10c5fe1daa1e66bb853522f432a6d06b85ac038ff5c012d0cc2c355d991a79083f82b364b3d99e99baf732e9f9252b4dc5f19306041a6eb2863ea7f1bdfddd7dbb4cd049439e4828f30142f3e4915740c87b31161a0dd5851b4008fe3b17605d42725a0e8b8bbb7dace029ab62c6311bd7e15ff56b15d0bcf16a52a6f19cc670e21744199424a220aaafd8aa93b4443e07b72016c0ff74108f88c239145eb090ba5185078bed265e8bb97575e15dd2244ff6248bd4610aca1a18b759ee4a7fe4cfb866c57e206277ef6e82e1b6623d058ce728ffd3101565a298c1bf3b4dd1dde24872d168060bf9e3099e12e5b4a3562c2bc030bcaf0343ee5560ad83ace56876f89f14b9d9d3ad7683e036ee184da746908c528b110a92d5318dc3c96c0d8974a394e2ac6dee5a555eccd4c98a335882ccec1a06ad4d333fb391714a390ad09e37a1b3cc6e0db72ef17b2cf4f65703873a3a54d55b8abdc65b68474944fd8f14b03c8f16b70dd06b3074eac0571afd16eab9a0148b52c4168bc005de71da0ca1fed0d58b28fdba6940074af4a5c5263e56830ace30a3b0a554e027df00e4b30689b563469d05b3b14fbd41944cc681307a778828882da97fb089eea0f6d211c867537f284819ccee9b3fe7bdd04212b4cc32d86e0bc96c3e4173d5ec7b1e5717951215aa2e6de4696b4ab285ad666e57ef5e4113cc41c29de9df9e07a639d62bcfd311826268a60001c4d8458d0e3b3d93429a83047a39220e8c4039513f5195a2ce8cfed5d55b898d198a62faf354e7d00d096cb23b141aa47a6422ae1be2ce0b00e1f62317a82e83b4d6a62f92f8bb94510c38a6470497606bb2fd33e459f95a5174a96ddb69984e664a70d61f2c245203b29c1a6f39425fedbfa9e049221707161e7e7230f59397f50d97d50f8472d29f402644751dde62e2b5c1f627e77609e29e69494d3d6f69387268dd8efeff689d9eb9a3683f45e6cf4ba4db8afa79551e24f68ee6df84be76afc7eed65a5ca11ece46b5332cefa35e34a87c9942062e1c8de6856475f98e9c6d57d5fe3cb33c40dd7eb0ffee3270030006d06e58ad6b8db0c8010b1a013a5ab3142f90c6a2c9687f2c5110e9b01d14199657107c52a81d38ef97c550e7572199165c681196f98ef5b3f301a16c48fcd66670dc3db1370f216d998b8120230991bef56a16137c92bf2383bdb56684ca7854c761afe706bbae4714af06ca0a8ac57cdf22fa16b6ff914459c035b2cf4a4f3d8ba2438313aac281cd77dff5abfe7bcf8c8e025b8f061df211dd2ea763b0a7ff51b426df9b0ac62774c35934863d0d7fd7a40c904dc270984e3f523902400ba10f03c3a836f75345b4fdb4f5',\n",
    "               '7c05830e9e5889e26b14ad996f4854793d8266c038111cde85bcc2386bce31d6049d426fd2ff86b182b68d8578f194fce1a2e419549edf61bbaeef1c3201cf3baf1f53e75243e89714691d435337f9db2da8666ca580fae0591b10982c18310373e4fb6537b5d514f0d1b22cff1a75a80c12207e61d88681006eac8765eea437045639d260ab20d522409178c24d941d75d27265749ed25cbb5fdbc53c1b25b69fa1c3c5d74f915f84d59a539043f2d80125873145246ab4a7567bac4e486b6144691b88422db69edf1fdb932cc61db0d372b32c570966378fb9a826393c85b3eed3246d771d498db4339a05d5801cd186e659b12600bf967696fcb2f45e9be4a12d92307b1c8ae5058a41658c6df04d39f724ecd5b1c380cca9ab04beb621c81a89c1ad441c94a0425c1e98f4fdf66a3facb8889c2b216896ed08e4439209f6a0c99a4c4677760f32f995fbf52487db40a15561cbbdf1cae4855fbd7eb8e516c8b8a77b718d4e4da660b5461dcbe267a39936a51e2ac7bcf68cb7b3795ddad6fd3cf20695c5973af903065e0109e0aea7e3b50d84ffc9f2ad4fbed2caae0744dde8ddcdf7161929e9e0d8d95f59af3e1a1e12a8d16fcaa5db4647b71ed52e71618bdb23fe092f568419816e87b7d0fce441a0ce2c31561651f640ec749639a744c6d13fadc497a4bc9719fc38771dfc26efec3177d2e24a24d7eccbfffc836bcb3a07cf9caf361c220cae7c627367ebda21679e423138e2bd1f74db472ec5e249ecc8a9d70f9dbb19227fd7c7873b7915720ccbe5fae8aa2f0a52964e2b7c447757f3ef1ecfad0d30bf4f5d703e205bca15c8e40739ca97b98bdbedb1788303b89fcd585c01d95945a692897fc1e085416a14e6393fc8d38dd67b8a21871b22e7edacd4816ebc3751fe04fec351e140ec832ce04a82113719c9768c96853e8410821d6d3ff398f5a9d026a12a783b6a16b7051c33e9cc362f6f4ed1b29cbdc923c78b053890b44522c476cb3a51ad94f2672fbb0bae2dc2ccfe587b9f19becfa2fd7256c9984f4bc2e3b7ea3afd55ba2a518d412d4e4339a3a7c19edb13edb9ae8714bd3fbf9eddef91d7c3478e0a7dd62745d74c2bfc56fe7b1dd28dc60d827a4bb4aca7758bc1ef6c1f65a48578a62593317608f1226d590d89fcaba94ccbec8dfb87839a5d6ac16e0e43c8a0a0bb5f54dcde16658847d1c4259f47e2ddb46dba9399cf9b7f31ac142d3dfeb5bf131065478be0a9b8eb8bd3030d001f051e1d1a0b619438eede7c349df72a38c87e4e27e4a99ad306439d5c6820e703e663e19f0b24545ba3287809eb0064d1df57105daf39be918a2f0cb31ea25cf25a4a2e8a6ea4bbd7693cb78ed3acc188c2f2f1a12013ee3eb549f8a3a78ba0a49856bacce52b0d67010c4e0b67b1b18eaf79fc265a50e784ae7b9c6bcd09f32364c98a7dc90006c697ec914923e1ac9392a0464d7fa70f527c8ae732f6d0fd7de53f3bfc608abbdae26bb76808fbb7acf12e88461eb340d17a358a92820f2ea79827b07350689db57462f4e825d71591a651551420df42a5a73a24118931a95007954c7272a665ff68d68e2e6cdf204ff2c52333341e425381beadd6382d12d928a053800952c52d0df984b7624d06a91f6508161b82c14707e0fa3574c6ac499d187166ddd94fbb31d959f6c2ec1c8f82d04dbf7d64588d58581db6b9fe4920c1d0f091b35920cc8ad7ee447bc0c46738674424f398c9620537fb7c1f50fd4e8714a949140cc36002e7ceb67b21dd13a50b83078fdb7e2a8c33389a59d98968a1bd7bc83c17feec5eb676502bfeb461ce4cfca2adb5e6bde7b037316e05667ad6c657037c8e38d8b64f2262b6a6098f2ffe832a66604b57ae4ed3a424639fa297597bac304010e259c0c7b673233ad92ab6519a4771d75c352069092492e6bd819601d327a302fe29b0e00d89cc2b7b6f9764e793d93f3d0dde206ec1d08168a7fd0eb7af874f54ecab027c9335d76c6776bdb69e1d',\n",
    "               '7c05b977ed1af1f465bcafc27b14a5c4b7b814b24476259b623e04ceddc6f12b9d4d83b722592262b673719369981603a40625099bd62435a6690fc025f13d2ebb40f52a034cf4dd7c306a6a414a341cf9c15c3f05e12355d04c6ff532c54809139be20cf068656b3e927f881c02162ddb676bdf2c8fcd89ea082a02833de70f1d736fa29633b100e0ce7de5348f93842f97cd7e1cda3623655ece80c079db778c11c8543c9995c963372c99df47e53a96d8acd07aa6ec7d9e563b5696a1d5fb0934b692a46513c2ff48a6e241ac32ba1de10ca8223b8fa695175371dbd1f23f9017c402f0d813cce781e6a8d1d9bfce18ea70cf8f64c820808376faa82878923141247090b5d6083a57ef1f7ec4efb8630397d179fbaeb6201447cb42aa94c6187f98efec7831ddf1f2579e2fb8a48a28bf72411f986ddeb27edd58a367a702abc659d33a634fa2321593a30086f7b831fde5da31762d0d0820146b7a5c887ce33170980b1499960142e27e6dfb9cd735fef458c10804ffe90ef31f56da18f3208a60146457f645df6b2df5a171db471c34af73ae99c1b11f612fab6a202aba6d46f34f6d34f4149ab55071c316cc23615c5cfa7d03b7332a9eedffa7a7f2a2a69fb47f96eaa123176c8573c86a9aa4f44eb98c02d3e5b8d841ba9400cc80e9968c53c7124c11f2bb80bcdc49f466be2c18cc331c074ea52e546f02a24b461c84541c2f809a9b5ce26f9085950d918434a2fbde7522adf27ead2e140b4d3b607c47ce51318866bc23fccdf3f30e964ed499e9e8316ac90feb32d5a78928f752d981a0136d98428ee6ed99e71c5b3d12dce6405bae27ec10685875512093ba3d8a7e1934f9d5fdf0fb81ef54e8506312ada85a957d312887925bd18227bf0295fb6cf50b1568f1cf79555836ddb6ab06dbee9059602cb24d6d841bb9e7b7761aabdf89d137ed5b558c06061f6c84409ecbba2fa78ac199f6f59bfc934eb5b1cdb362d0da0974880de26129531f3866fac57b39d427837d55f7c53a2931b9daec4eec16c71bf2d8daf06f6ea906af7815b0955afdfc39bcfd3b2c7c88ff947ce3269e6e27bce0875b2443b82074c15adb3e993de49b3f60949bcf4c664126ddef31964fd3bf58e092c923b36e6eefc8d79684226e7f4cebb8a25bbe7514e1f42b8d4297493a4fdfd22ba70f938a10163d1e4b655f6966a6a550c0e7e4c9d94df9a9e7a4e73fe74bd61493a431ade08160804c0f2b3e2c2fe6947541b9a492295ba6901f88b5352693cbdbea39303d4e079aa98bb9a34b1cb5fe980b140f9e9d31dc370c2c4375332e99084ec25cd3fa5181ee77885c97651c739c664f7772b19b86b6d0f66480a4e79256f9b7f0e78114a849ecf239de5c5551c5abb411515be3c55041c23caf99ce624086261c026e5d0e2c5cd456afad94e6faad98909c4b3dd47f576876403fb4dd001a8800e9b8f12a8753e14594ab2240aeb7c4d6e6da673da1d187d75a936145044929c069f40baa7c58d5324e0f1bac14171c41b50e545ea0250c6ea8244a152adf9fedf47dff00994c8bd16f8248a931c242b463ae5bd9463d77010e27c9aa47fc26b3624a3eefc54af1c6fcc958fca80e41a371b1d8d83752f0c08df046983e60108df35d4077dba507fd950b64560a50b61b21a1fadf40ebd8f39a005d01f2f9444388a131940989053703a9e4a38ed12d0b646aaabf88854e690b7dac9908f5b031207062412771d98b81a892a0c654e723d6fe478014d6a3b1fd3d118a005995dc5e715496fd5f629909a1f57c34959e465fc47fdbf7d61048f00dbe1d0f614e2a051f6080c3a541fdc4a550c32b40d2312f0680bc5615e0360112bb0258ed96fb64d0b571b650df857c56839d52af9a3303189696b0076c56f15b64d41a805396c689165ab46b5993f7aa7dedc5fa63d8ec0892563a64b12fbe77b8c42384e48181a6480e75626175fb866b4f630d2f74549df042fc52d96905a2f103c9de169e071936b0bd532a',\n",
    "               '7c059194940258741a6b0b307e40f309aae2e52c2fe26495376018fb0ff0ceefe7cc54a3280941fae907486f629dfca8b24ba717f9f1c39eea018ab178e100d6cfaf4530aac7f6886c18c3ee199a04f6269441c8125004dcdad52e3bef6ef59ca2073dbb42c3776ae6586f6ec521d593e78dd170b376563f75b7f23b1e721923eb1dc4ba9d04aff1528320d9b43575d9936c73dc9483bb2fda493f1c74d8adddd931cfa1a583e58d231eb989929692be3c7365224d32d4bb9578d352d535a41fda491678e92aa24490e427c8c3e739c645912e6a625616222c95c11c32dc4073f89258f7512ab1271a81b5c70af07f40ade58d5b783e9dc664a7f6c8101e2297ef05c329fd4673e782acbb116e4f8939921442f2ff38c22708a4f1842a5f8c993f9d3f9da9490f310ff38646ea6fc46d212ad7f205ba8d84616ec3bab30307c6f7e07c995588f490543f63b3ad113b9510410670f35efea70cab64022d39961c794949b7dce61b97071fc17d6820b34cc7b59357e160b2eb4c601c98f34256179f5287bd82aeac56de0511fc5596024c9f9845699f1361007753d3ece2d122e1a3949b2a38f3f464ea70308ab5e2505cad5c6e192235d299c2af4c3470eed2a45495d458e5114a21dd3dace7bf1bcbcedede642fb66cf750f75b8c39c2b54fde83663e105b9a4cf3e78de68d8d0871650baecfffcb20e44f3d998c447a0afaae2b2930b6e438aee91f19e6d618f3f4755f35ebf0fcb8f8c49ba077253f6229a6ab49163f1282b1cb3c8de084a803592286aee870c6b92b672d57d4d40fc784a53d3a5f27a84fea53c0507f59afd66eacedbdc3797f0a15fac4e40895b5dd0242ca628bc7087fc44edcbefee2ae1a733aa765d188637bf2ba326f37a22c47cef8387918ca02b758810337f31a4293ef65edc7f006339ce1124702e11a98d0d7eebd7b2c92ef7846f904130ab1f5012a7829030a8f3d743d21990939ead02a7c7f0eb10386e26a31cabcf30f4f2e2209d5703552ae9b4cefa529b96c1ea12b70dc685bf28d5d927bafe0e809eb69d6df9bb290cfe2d5946980dbf26a00d22a6fba66a1ed72bad257ddd18443b495c2df2c796fad12066fe6044450f34050c7812fbd381097b72a8d29f259ad4094e31da8f3e9ed2957f49b00eeb7a8af93fe954e4c5f63c14b368e0bbcf02ea739731bc7462cf3d8a2d5729a59a368f0ec6c58879edb7e4f72ab60808289c77de8effb01472b3ae69e0c6cd59aa5cd6416f6625e26ced067bd8b513d579e5d4ddb5ebd73ea2151270951ef77c06865db70617028a03ec757cf06ae05c0fe282e55996f10a66436e738d5e8f2c0b3a1989de2d2826ff8d94dd94590b86c1ff7e7b14f7a2d255c2d7a35b78abf745076badfb8c9ed61d0331b8a1e6f2d10942d0c9e73e3ceb16c460e112f4a7b722aff8e2de42f310c095588bec253a06bb6ba769095404f7f1a8b14616d8296901b3bbebed84ed1ce54897bffe4f2ead6e0fcc073ce2f6530d4fd0bc7fa2076cdb40ddb1f40f50f6004d465fca4aee5ddd6d5102ee0662ff6f1cc488a46d0bfb55f42a60dc435920b9877c573f88a85d94db127b4619edd3e682ed5fd7e3c56510ed132efc94a2607fd99840bdffbdf45451f3e6f6e9b3bab54f142e2f258d27d84d54478b7df3a135e4a9fdf518878b79a6011afdbbe81da3c18e9c256ae3a723281e24fbc23223479592287c49f1f32f7c72d8722504c3e31376fb376bf3e04502b0a7b9752a204a24d63435f7cb0950a56f82b8ec0fdebe450446838a5b5b270bc82c4ad74a3f34006f4878a6bb1592a2efc2501c571c34ff09061cc42ccf12911a2f8fc7e71ec95fafee13bd162316f90c630905042f6e0a0626f1258cfd14d880d376f63501314be0b53e71eff5966283a0063c301ead7bd8fc71190e97dc67f4957e1c685f9a62b0e89e293959a9df9754ee88153bfe6b5c16c22657c841c7e029cc741d6c618a745202b475952dd51b977eb41cabb5b016f',\n",
    "               '7c051eaa9aed0a10eb72a33a3e5b212ed530cf134b3e0b2dae45f7dfbfcff29ebe22889295651777f997902848ae6462315e2bb56589b142169aafeca9aeada66d32ecdd97ae960c6f3ac2afe088ddd8870a400fe4b0ed1ffcfd71266805463c2f28e7375d7479b53e3660b0763dc522d33516b8386ce188183e5cc3929447e19ed3b0a2f8effa243c2b2c9567ea5cff1f77561d1fab58dd35d769d4ed0d0bdbfea3619cdcc3f3af7cc20b2eafb9e86d182e933fab0fed0a6821ce1b23fc40e154db930b149b1ecfae7a185a2fb79954539bd7b7e6ee1d9ca72f9ff68a57e6cdb299a6535c8274002b73c1d6a804b7459753604d885b869385fc13a87fc7be08df2a686fbc4d8d7573f93116400f59e2583afb99584dcaae2a3c21baeb9d9e21781bf97120e477f9a851354b336791fe8f1d43241319b4c666aece3ea96119dad4819fd353d2e1a3e2ae5010341411d5a05a160190c774f6491923afe65f76747c51839bb015f2e742078237101a84cbcb7ade0c27f5e724cd119bfbef4e0d7bd591069b3176d9e705719aef2cf20ef92ebed1608c06cf19689e6daf341ef425dc2ff480afd9ba36bbf1eb4ecfbe89ad0338ccb7e6d415f882e0278ba0fe8bd5545a55daabee0660a24dfd75476d34f6aac2fe4f11a296c32c787ade4a2fd037f0f7d4f96b70de6297f3657f5cd522906967119ff9e76d0e857abd1ea229cd8d1ffaebd4403042982bc923a5e905a0d5d9b3a87cead91d5d4c353508c7a41e09f96fa84a1b5c387349b0b5b999275c430e2302620df642f5bfd1977362ac52f35b545445e47a933c3c64c4bdf1f888250a4b7370693fffbb2d81ebcc99f72c22a23dac691c367c27ad65f7d43270c796f72680fc74116f04c4a58e9c6ce5325696113e584573584ba020e09667e6319cae384ed7d96934ba7e6a47b2881be5ba8aedc1a731d8e5902bb53363cb68d907d19e8415bda98fa16bae9c3a813c20af0f4a32b114c49809dff7bd4f9a6b0622e52d2b8b171669fbca4f1d2a49e0c40c48bf0903e79aad1ef66cad3f3036a61570e3042c493ff59ef8e6c647d27f4aa165d8710f855519b45a2f48197a4ef35a4ab47f86270855f0378e3e198830e3b8e144af9212d47d524f4519de095509f5510ceef257d3a04b5d0ab05d3598c0a394f72f9cc498d59555a9170295630ef60453c70b979e65a5ee764554b582e69eaa1a842a7d4f446b09527b0acb305d5788f531c7da6397dec9688aae1f1bb8873797e72b8e25ef9c24bca961cf6fe41b0b9bd059622c15197be763c0dce6c7a4dbc7135b1156108d49a9e7de20fcfdb80975a8119522c1b5b0ec36073ca37ad52f47a8d974828932ec88968f3b841c96bbc775417ad2cb143616fd183b8b190bae0d150327a471fea5c0f316d393beb8bda287783223ab32d49aee9a5c357b3424168db05a69be1a28f1306c3cc497116a27affdbd3b822b2819aeaf12d476ba5693afc3719c31b0f81c63ae40528773e0f7af94a9001908b6dfcfc8b527f1c9bdf479f14f4052607f68d7fc1255b1fe4c89b2ed62ac29049055f170a99322d86205c976e2bcef0a0cff821938429f99d8e584d326d2a9de369633722d5a2a9988f4c318421b020213bf6f09a8a9090d72bb5815dc0edda16d93306bcdc7ea02c6585447cad5d2546f6a1308f0c48625210dc8ad159d0d0069627b9650781dabbc7468078b75a0a33822fcd5978e3ebe5a1d7580de58d99f400d3bc355c3086fa85a75e6c3a0193f47a4acb4d6112cb4255df31c2f86e8814a6e407915babacc87cd8764ebe8bbdb818dcbb0b1e35950c2aabf92b99cbe0df441beb93e24cd1264303c9f9bcd0a40c6069bc727a1f3a145c094065b62854f6821726ff880fe3962dd0dad3ce92f640229440b9f5a637d0a4d8af891849740c9934f4777dc77f0dbb83e6615c01877dbc167155e1556cf43bfcf4e091850c3df17ef83088c6a3a0fda79d79601a87ba43c8e1655f7f3a399ae5831',\n",
    "               '7c059c06ba8677a46473172f8181c7de499bdcc250a096b0bc1bbe111059d77b018ef386870870abf0f8fc60b021684fd898caa4f85cf8a7be0e2453dd64d24d15b535532bdbb4897e9fd2b2a70e6bb07eb98599abc833c2dc0f04da16bd12567e049d53d0b053d874c988c1162fcef806ffdf3f5fc063f682cf2679fa14dccd8d63107661f7c7c46ffd569b28a61dad00eba9e75a0f43244f6f24d77cae744692458f4a5c0a9033571ce2905c01a98db55121f597ae32c94d8bbb75cf628e2f5b1156c4d775cbba2d3eeaf6184109cbe438d4e453a9fb86e313864ff1dc116ca8b59de3666edf4312776d559dfce490e78452655234a1a01aee21a3611fda861d156353d88495598d7aed3afc4097d2e61917bfedd219ce06ebb97737ae5c1d98f8b99a05f9171a36df3defad49112ddd035e6782601fe29db311e65c8dd5a1733a2d17a1064c860255d8a9bc935417443e99dce0ef297533c5e5d2ae5567d812aebe0dfe4ce2719ccc3e005590070a6a6f98ea1a4e1fe95b1cfe61e4f799e4d8d86b4ff42d280fbbc25e267e133770e8c71cd9e944562baaa548516f8bc34d1d0c1c37e478fc74aaabcef9b7e8b19954ee6eb1d61d26552e5962ef38dfb7fef5a43d0f0aec8e16a114120ca15ba6f982bbd913f622ea477bf04a345638fe72a7b7ddc0d1f051b1af95f74f065de4db181a6281b0b70f13f4a0ffee8ed155d2556d214742a34f3f3fc87be638fe81bcbfb3f89b52fb962e95eb03b64b0e1d1f6221a5caa5e8547cb766ad91402bfe655dd665d7f61b41233ef68dd692ae655cbf7d9fa528fc3327b22f706a0fdd477ac4fb549aa9c73f8ac5837a144a0bcb227e8294f9830d12080ef114339a96d7115398686ec6540f09ff1fead59ac57d9f3c6059e3add0b871c7d891b91b2f14a190da9319ada8e56a5dca3b8be69b7f13d11bdd21284b4622efde293ec21ce48313dd8d0f406941f290eb1bc2ae30c453d0bcbec34222f4e9a7575768cc46119be5f37394b9397a45ae80961ea4110b5a53b4ad235397693b6e25c5b15dd5291d0308872b9f432ab15ef4e6cd02a869c8f269ea1e9683ff238272c9070a9c2b77f0fbf057444054cba207124ae5ca23c7c29f05fb49afd7b8fd93a93042f888a7588ca28b8d0d2d0f6828388fccd9e0e052fda8e90374d4b4e2bb229236d8141344b5811cfbe1b1b5f5a7a5ca93e27fe8f724b875475564b581323fc2d999022348b77cef2bc6cac486ec4a340b800792ede1343e503cdc89587a175d1d384d2675da81644b7b2c9e6436d99c77a69e290677e3b04353e59ca3fd874b1673e906c3166a582323fd55ecdfda61ca93a5b8a9635594ce124db208a29e002f4c718df41b488b1d74ce234b8db3e3533dc95e6a462621e46248a962b607ad7b2395c6191107a85a538796f652dc3938ef9b434a1f5fd4f8f4097511436642dd10c54930130df8d220372e31326164610972d14098b005a2122fb39528e98f749a502437717a8254ba890c75a8810a6693085ef90aa01aea454fe683fde03c520036ba8034e391533601b1c23143b953d0680e5a8f58368093976b7b9a7344c3877016e7066e818c3053962a79ef2ffccf56cdb4727d608b3e62674e7612e0fb8a4d45d7d9edbaa818a248ee821ba4039d10a1d1a120bbe2543f59a7c58873cc9482bac668e5ad886e35c5ebd70482e4cd639113c09cb898129c9e3616ce0651ef4c5f18867a601ca19e51a40fc8ef18fa491319feff8ee9190dcadcc177d1afc9ccf541f3ccec3e31dc204e5f6784776f8086e3fe6a916fc17d06569cfbf8ff48176bb4da49b2d755d53a46f3fad00d9408127576a081965a729cf07ea3568ccaec384d1e865769aa951015bc5f90cef545b2a6dfa533d02327e541fe00157a50905450b35c3bcbfc4e2bb01baf0181d91453271451774f91beb0494dcc45b80e62f9ac4592510aa3c3dad0e66e3dfe16f11f8c5e30e24bf94e34106876f419387050aa39452a',\n",
    "               '7c0574699954f74d78e9eef534b26866b17fc57134f49416ff7cd46b532e4499c4ec6c0a5f2a834d058f196824747c6be42bac25fa73fe7d02b31f19d395bb81faad882d5fa8c5a1f3dd27c4c619faf2f650defbf78e675da3294e5c8caeb9b3c88f59cc71f59ebfb3c2c22b60ec6e56a100658237c1069907841e7c1f6e26466c53fbb095d8724b058c73de8c765151df485965e21183f8822e23936b56e80df9bd67f31c5955a07b85993a8e8a658e5f9040cefa4cda104c9a4b72415ff8aea5d253b0dd20b7e879b7b288fc5a61bf320b5ec6b976be3532a359ae0adc54cd3185c3f6178d3f62e00755adbef7af865dd4955f6a7541e4427a9cb265ece476c9ba07ff9cc6196bb9591e542e69100969de2ae3e4389b7f2f504e18c8fd98e964d466e825bf538d9e794cee4188a624d74e2dc41e9cdd6628c4bc6899f1953a65c12d0e8e62b615e87132547004a5b1518d5a00e31963245848559315170493e4534e88beefd281b56746a20353d6500318bd4ac3c3aea499ce9d6c9597bcbb25215a9e410f95916e9635f9a9689be9f25af8650b3f9cf5c3f25989307d8f3cfdf56d3ffbc04b7b21578d73cc1fa91663b327ed142738ad552d2c111c6bdc919796f2dbe20d0fe1d77123218ce60a9bd8b4a2300ec2ecae2df66edeb3994b165f221564814c950d9bc43430c9f943d75fc09cfdfeffdcfea6f286a29e11ba5e7cc509e068acf14d9ec6041a65da0f99abb83742175e87556dd3719a0bb1565c53294dc6a3f43b937f1d1540f4ee430b16a99a3d3aef57f36b8ee25ea50626b4a63a00742399da655eabdb89d722e4493d9fedb2d7ef5d50aba68ed03281d8ff18b9573108528b2095ee7ea08aed36e3a9ed1d4b3886d40ff169c4aef0a7f4202e66114f300e33f51e0bf85ae54002d19b3d7c3d08653f85ff83ce96039e6b6b475d722ae7ad780119e8e0357e87984a71938fc9a389880ab1da8b32fdf0a1994ef43855dfad87cf6ffbcc55488f5ccc6432e9f491ca133356e03454238bb50be75aec16cffa8c8ccdb34b707e4208f3fc2fbe4fe6c384b0ad0b5d86d8d62ea686aafdde32b1d07aa48ac4937e9d5c7679768bea55577a8bec9b8d4a8f3936e6218d31b1c85e777909c780861f263159e0dd217b98b9c840af6c7c251321fc54719f09ed171f611ca5d290b1f706145320abaafeb2bbc7efbbf30fba58fd7a274a3d0aab5423c953871def8af487049a61626b988a0c01bb503c675688527866bdca9619665790de2ccd9bbb1d937fd47b3fa8b6b749332628d09c4fcd0838feddac8b4c61dcd74f35f9b4fd9c7e4c6724ba1f377d7a1cf8724b886508b2dd51285983b1bf604bc0f3a133af6c4c89aab932a9cd1d3e256577a4261fb7fd8f8141acfc07b4bbe60ee2916b944e1cb42ebff0385401c65c8f2ce27df984b379ce2ae8742d12c2cfce01e7aaf3671133175f9683a00f5139ddf7dab187dee93f1b9d45eaad131efe2715c270401fb5279e68fa471cee5aae741aff6e352381a53c09ea942dc480c1650c5064a5f4825275082ee140f3eac58b169494804a166c306fbd5b0cbff66e8297f1e6a08f218fd5967292d33e712645a1526600a3c9d71b2ed23dd93466f47f5ae66c3f141babd710481ea56110dc850bb4c7afb17909b6857fa3fe085e9693e93c3a965230096bc6c1c7f6e5826c271ce8d1e9b0109dc2eaa3957b2e6f34a8deb8cbaa7c43b6500046a05f5ad90d0cd3656476e24eb6c832feff4fa999bc32d078426e0340e53b58bddcead3410b9435bd2a124bb0564c8d9010a56a8b916d2388905d5239b2624f5a9cfa8c7086e211aa663dd02e7d00664d701ff09ad877fb6398350bf3e268b4a0d2bdc450ae4189c0110b80769a223d770b74f8f18e25f2b498c0934ad640f1705c95abb2c0d844dc8dbf65d57ce66ea33dbfcf3c91d80643133a04a112a7fad3432a8f6c830825af5dc00fa6a830537b135bff17f4c4311b1dff0f11cd32a56fa37e',\n",
    "               '7c059c6cb0428b20fd38daad7c51e67aa10c2c51cfa07af164bc5aee38dbcb2284a51ccc812c6b7cc21772a4322ab573a24a4009598cdb1f962645ec9d024d5808984cd15e8a9492702bf824a8c7fec1f79289a0314b839ca4e2e962db2c5ca358d24932a8eb095fae39b2a8d3e8daa22193a000dd4ebfa6cbb1f883d9567369b705e6b9c3423d93c4b5a93e19a5226ed99e04c4007f347cc95803549af59a6ef50daa9ee060ea6f4403a84da599eb7e941477d26ec0f581ddaaad2a80ee24c9482b991bbb07f91abfda2ffbb571bc1fea9b6ccd6c65b86d665c43f0777927fbdbbadca47c23b9e45e461821d6598d54ac66828a73c049ce1844876e50da442e5049f851a6f3450b2da8e9403ac360a4d1eb7c3078bb303f4d2cf06e203bf5a714ddd12f1c54b220ae35d7c0f60430097dff47f202bcf66a9e0e74af40db7a0decb2b12abddab743965c2e0f0147ea89dd7c0695fd72ad812637a2cdbf20a44435a6b354541c8c244869402234bf34e461831ba677d287ddc165cc9d8d1e3b0d19772c89f1782e8ff8e616af4823417df549d4b34784255d1ad7428b6a8c75fbaa43f72fffe502b4b994f84114c348cfb75d713f5d3fc5a9a4c8e11f15c0f35c7088df5b4427e944a29f58a2e3183fcb22155690926ad94e1a9f7b13495902af43795f93865047a5287c7133150e3102ac05acc4ccba89c04d2413427eeb183d2909f359b9ca4edaa50017f7c3383960f1c50e33c72324dbc25c636f51473414a8abb3c866466c9fd3abe52bc9917f5b397e9c9f604e0f52b4135f975b35f7e9352713027324fda45ff594978723b7a3f905612dc95dbc75ae17891ec907496d63575af91862678addd57d278cc5886a73f84d8424b49f67df16a1b86680696c63e8a5a5c4bfcce7e50cd2152f2830ed628930e8f3e99808a6ca0422eac70516556be493204c405cc3bb63199ba09c58311f239273e959fc2802e7b5632acf12982f79a7b772fe1b83a320455aab16b6234ea1cf6e6c4c26bc9717d2f7353be1f4fc6860ed5726ba9704dd7309047a7712def0a2d08222ccd974a73b24177a1613d53e786a27781cb4a77696ff255f2a0c00b4ef5a0d23937f81f707d2afcd5e8b5f1078944128979091610f9007eed0c5bb066fda6e6f7089aeb960b38c8334673ace26dd885eb0249387b8c695018b349596560d02b663b89d99e820067290bb77f5759024a2fe1ba4d4e609b9246a854a8f23b46e6921fdaa05f08c5c20a211b4905f8faf88826388ac771e79f2704db1124144f83b1f2bb6269e8593a587538c9e55cf03650f079288d0092b49b9e3b07e88e66df08c2e3b1ef11677a38e7bb0c64788eab98350f359f6ac98a3778496274eb9cac08c9752e1d9e639aeeadd0ceb3f0189b7394ae722cb3fd533e3ca3966e0e0cb7f04c6b15dec9ab781769f327440529ef591d43aac7ed3713b7e943a793f5faa49c7c44418659af1e6f590c0bfa02bddcc1b318427e6e29e78a2b633e5571296302b71b73b6630f41eea79fc3d6b5cc4719d4955fa299e6fe0c382b1bebd33e81471934e27228d13f42a19a592b07a2be3f9d00d34cd7147a307a12bdd06e1ce52e361193f24a08b144efb4486dff84394646fccbec1e78ce48ea93b7d7a3b995350bb4ed9b4f98de6a365df977dfbbb6503bf975abea845bbe7017a1bb08aa3d2f568f8f27168ff5aa0885290c163bc920874b6490f0dc79426200d59207816db7aec5de15b8ec1cfcaf4a92ace15dc827a8b9e640a95b4439429b4df8552c5016bfd5934ce7a6c7b8815105e4fa186d4bb64ed2964accefdba7bd209be2b2d9e411b2cfaa9aebfb0338cf580d7a35c4e926f0e3f680955b1cc6ca5dc6dbced04382cdb56386ad733d929538326112b6b633914dc2dd4034d26870a01b0e6521db05a518c769ad29ef0feee1b80ca81a3ff65f487f7d8bdc32c3b1f443acea29133533e6b56c727c8852bd3bdfa062c9dda14b8f4cf6f13b67924cd527d',\n",
    "               '7c05db7fca848c3129e5a27128b62aa72df3a6b4b1f111801c2e0dcf42334fd0fb8cfa4790bb5a0311a0e3a7b7a8ae33544c4519ed92762884a12e4769814b79e50479f1798572bbaf555cd49b5c684e89fc72c2de0ce8728fb23e800fb74b7c3abe62f96d7722e6a48709910ab61b97d1dc864b9dc64542d3a4618594fc88bae771beb1995ed23cd90fed4190e65b58264e99ec277e6b7ccd63e67f0999af0e4272f63ab71689ecba279de067d6e81f04000daca6d3a1ccba36f6fadf529a14e617abc522cf3a5521911504e4bb7269cfaac8be38d3eb79b1c6d88c03ba21793c3434931cf965d61279ede1263777e19a5a18d0d58bd37f7eb438492d8170cf42c8c2f7d1f1240fbd6e40f857e52f7478e4342adafd6b6d01faedcd9a1ef931b3d260360c13cae27b44396cf41d151b4f6a0d4ad7d774e07e7c581cbf3e7ddf1496bb2384d0fe4dc77d2d2fff0477afaa067330150ffc23d638678d06ebc3a98ca1033e282a0b2cc0cb4005a1149c09cc4a935737f89207606a39dd83a92f5a5230977fcc180bfdbc850bbc976e38d50a3f528df729cf4f9e284b231f66d1e10b8f905500a209dd68da7c6e900a3e27e5dc42f13547edeb050c25cc057ab869fe529c1b9b132f5fe6a06d4dfb1978147da10fdcedf3640566a756cc5763126eb05a238a593c6c8aa747250f597895db27a68ec4d8344633f493cc4a26566616b0657ca1316b3fa8ab78e191d62b521a0452f7c0e3347926ea965f0480a3378919ed93aa092d02578e9d7064ebe1206f2530f05456a1c3f91455ab685388d109a693b6fd77a8e69ccc2d5662c8249e74cbef3a4fe395254ca009da29adfb4b5725398c1c76ab341c6748015267806640b526998973f799b0ee4b90d08eea1642427c1dad2073d1e9cd5f977ff08b5b13cc0e53dea08846f472320f410c0ad4eb955c4ad228a6a69f89cc85db3ec33f3da13e755bb022dde900df015011b84da591721f4cb467fba2d6f0b5307b7b383ad21532504dc9deaf45fbab5c5d12ac9eaa81f56316dfe970d7641e5b9f68430830a685741de5a87b472af83051b19a266b470ac0d47b7c800065a96b8b1624455434044cac17035ba0d7cec3c29aa02b733d709f8fdd05703125c3f46788e77274348e534bd514c3fcc87e270c794dd92eeb6f786c1fff18e0733a637ff327551f229ff4bc5ca990fcd92994085df059d8a92b1ffe3b47792c1b708f83ff99ee3288482f40405f176502d46bb89fb80953e9cbb344a38511056dea256affd2ea407d320f2fdb1c1cc1b8984176be9ef90a596fea845439fe568cae6c550471fea16296eed6b082ddd35a9c733934b4cffe82183e126e88eba23a0ab0e89cef11e7bde19c746a67a1c176e215f7ae5e981c179ad68563793b52dbdbc13ccab606b1e7448009106128526ee25476030f278900c94b483ff88404ed646eec42cb26faec93726ebdb2e42c0c4b74f8ed9e6fc5db9a7e261e71eb73329f7ec4da2bd3e011c335082f2e8e972cc072d1368ef701dec08f90eaba93574ab4fab9c10363d7ea7a80dfc3ba828957d1812c2fca8f69c1807566fe7c3a36a14d0304f433fb7f311b0d03ee4f46e09cf5c003f055c0879ab3a7314f979c3bdb00d0795bccb23161de1112b7b65ef4d643ae471aa85ce1469ab699208f81ecf36226dc339500a97de62ba1224b1030022628f79ab1b66578e5ce0b52a4c251d2c04b8ba4c1e7b84def7470047ba514b761284a9c5837ae4759c91f72c161f30bd9c502ad432ed69af695934a0aa46d225c8aec865c740208131382227b2b8a7c8eb3118c188002056614065689a1ee4989d0fd2ff0d7c506a96b1d1f9fbf0dadefc3b3503dbeb026bc0a2f0874aa9cff469a9bafe39750e16478e280e3270e547bc574b79ca899faf1677808be0222b673e74acffc74baf60cd71ebb4676a6010758f5240ee1368165220851f84449d0690bea4b8d743bb172c206ac99f8729499a20fbc289ed4a6d500',\n",
    "               '7c0514c0bac3f1c95733d220c50d40a0024b9fdbf2012c804a6b567da9be1e1f7248085e45e48a0208c50601a0c43218728422166fa736adb8c2b7f2a425e428487953fdc99fc50b86a3c7406a53642b8195611c4fe069da23e28c2d4becaa77611e16c3b88499a55eb4b9140798872ae021ef634207a4ee3d4d12c6a9d90b0fa9b614171584e5ea177371ecfc3e3a980c920f13e4f53687f523bdf53f7be93d122af5f23f3f8fecc3b7ff85411fccee54b2029a1e38d4a12a02b96b439bf21cd3b7c7d88531d3ecffa820961b33e5772e03e16c8180d37e926faa8ce0af24897663e2002d1fa451866dbd8530916da61d3c968d5fb2f082aaeb5f8fe9d27689d65a6f81f1c9ace03707042c2a60da13027987d786d879756c3a89d0d80e6da68dbab4651460508604e6979dcaf81d5a694cff908f382ce64540795c37cb5aa193a12acc53f5a3a2ca68f4fb5262afe698ea5724d02a73a24f1ae1182326203a05b47cdd1f1803cb3c421434321db931912f0aa705245cc1c9937e60ba4866435676d876f893c657370ace7f9d2e762fb41fa01505ab70acc51ccd09fd62811bbce0add0a9af09288135539f44d889b9b8d11610d226599113d8ca0c75e54df89665ac8f147e4a9b4e35778ab84796ad92f2b326bd57ee5cf82b161bd9d9df7b86d0a0c826a7bbf7af430024d7b1694f25c7bb0665c6d8aac9149db21d62e554483e1af44f88798bc346f4152bce2c2aeed9da162731cd89630463e1ff9807fc7d7339c6b85491acfd36843fe4ef945819a25dfdb1c855aef8f33b08f8cd054f39ab3a8d8b75c207705eddf60421b857f0abd9a2b41db85fe1777755089e44801d7c07a976d27eb35f165ed8f0727159f0c05cd184ad3a55b62a4eb60b106979bb9929939f9bdf665fb645ed0a499f580b807e2c35cf5af36f7359f4cea9a1006b4fb1bd10749216185799ec4ddb55545199c420ad58e4471953d6c2c9184c0287166fa8cdda7ded1af0cc995ac03baa1c8b96351e9236cd28187cc2e8f92d67d9060cf55d17d2ae7f096cf4d30acfe3317838f692ffcdc509f8a22a54abd776bcdcfd777482d64f397646a49bd29dadc2a9bbe147e092ed626e04768f5606c923c181a6e1ef15e60ed3126462b026258711b1a15379c511ecb1f9430d98aeca86da918eb5b16489804b1a63610225bb858aa37acda4bdf94de90e1416e901edef35dd0e67251e9bf2ae7ebb707fccfd1150bc1316d83d28f086d5221e1063688db98b00471d117904ae9329f0ac6db0cd977377087c5d05beab00007ba983a31fa378e5159f4ce5d722085a942b800f3d5a5e712879b61c6619aad991fb7cd7e587a1a42b51ffdc65b6c907cffe1fa14c6aee571f2f31294143ae3e9f9ca5c60104700db23339d5c8cdfbe9ae68bdea99a9b47ecd074f4a2f59c1ddd02ca68aeae5b2da8e321fff6b4fdebbb9c0637ec5b4fe2bad933a816f4714a1a8b91b82ec2dd49d162b724b187aa5f736daa9cb7a039234b696cd131f2594e80fce6250a46feef756fd918c4c60c48b57687818e4d731a4c2dd8a9c4cf79e3157e26dcdcc9b2d83b07d8b66663fc3840660ca9eab6eebb3fff7a85b0c98b99b9ce3a72b2c331f45d12ee9a58022705ac592ebd087b4dec10deb18c6ada995dc60e1d51a81cf619b386d2a3dd3d55a0cf68329fbf0747f2bc7829afecb506f1357ba28835b19ae94e0e8f654c9e23c3816900a16bee772ae3f5d04b0396d07cf79896f187a6b3bc9831a0d6b499a25b23e7fd7d4a5872bd47f1309aded954b6072a5515be10051bbcd7100a129c3ccd1c6f30f7778ba04a88dbc3d23284c01c4763f1ecdf105185c72ebae6e520302428908faf67318e2b8c230be3c24ebe3e00cf0e027c964e1b85608f9223d23141ec3bc47a3e92b8fab93bbea519152a93b8bbcc8b5de9a3ab70a04b48f4962982639934242de8d3693e9cef6350bdc86b490d6eae970e96d5dbbc13b955661efdf9a470ddc5bb75a17',\n",
    "               '7c4524fe0ae93ff8d195f2b3c6fa4e8f9ed5981c410b94f39a78971c3c598b763adf7d0b998c200d0cc488292340237180fe016a3e759fdcc883f1b507aadcfdcac82740183eea207c5bfbc06b5708bda1674a53f1e310f78c5dd378673fbfc3e0e2b05c20daafb2aff5059f4caf434ff3c4c9e04d5b655ad1db7abd28bb556d63eb0bce17f49554b474396f9edb891f6d96921a3ac887f6874a5d3ae7ff5819fbea9a6e96698cd49e6d9faefd910d922989a6a09addd964c1974c5961649e8fb5f0bd14ec61f2ee4f64c461e89b33f4925eb52c585bc251d1aae6dde43ef47214913bfb700a21aad2bada403e4ac52e7a114a921efdda36612e273918e0cc1afdc37c97a85b1dbc0d40fd3a8aade0bab1cf2128d3c433333573e33acc867015a9c7a0810e75fadba64ecf872ea00ad64e067b8a1ab4565311c5b907b865a6ac392b24bde2d733e410212261cac078d77e20a1dba1ee14799a484949aa1f8521ec381a37a5539911e0c4251db9f3b7cb646b43c0f093834d12455b1986e8e5d1b503efcda4daa1bba31d3611110bce0b90d58de21a56fc30',\n",
    "               '61e020003927356f82c4d9fcacf6599a01f58d9575adb677ed9a6f341a31937ef85ab29b3de69075eabdf5bcb4c63c1d1be11969f0c1929b02033969c7fd509a4e2559471e40a30407efc2884a8040e2952f809abd78520aee16f04d3a8c163fb69186a2213972bd2210d76756182d1576c4201c74547bcbcd94483675eb5d926fc9b63fb62dd85f6aca50',\n",
    "               '61e0400059272761997b94e094d8e79215b8cd9545a00660642bc9dcd2882f74ad5c8cfb537266a673b5125fe1a62698d24e796debe8aef121f189d6e88a5e44831db524c8f8108cd91fb0f8e14481c4b5d70d36fdc311530d07bd8d35a72c74bf47bea42dafc351d8702093a328fbc2ee1bf39a8f2749821df13cab44f030afcfacf56b31e90d45ae77a5295d56cec45db9611a61177c87261b4cc817d20037a98b4e40aaa6bf8fccc095bcf29ead427f2d9c25e80ed3fbc2d8cdd1bd4ab8d7a098481540bafef18e7d2959bdfc58ce6c59f143cfc4aa7b4815165df575e65ca17dfcdc0577c0bc6a8455b2f27b9d5c894b74a237a5f67b1884dc8bf7012dc024b874827441bddebab5c9518a8805e53e39c6632d04e834c8ce5751212f720e19f0',\n",
    "               '61e06000795f3883b4d96bbec2868c31b1a0e625aaa92903a3f87d4985094ea0fbf3207b4e23b0bb149f0005b59f3d868dc8dababbdbe56ae90dec1f4ea75a3bdd0644da92549c6bce0365a3d4933084f5c584e1f2024bad84d761996f2735b478787c555ff7f1a08a0dc9f20ccbc4c4a27f189dbaf475c10440b2b809003ca491db67a09a6c526a376775515a8990b848f61993a67c2374814a28645c2e3f6ce37ec2453a3d13792f025c8f5e5be865b0872187a81f87605659f356be236e2de0296e097166f73f275e2fb00e97adebb4136b42cad9eb4023b838ac30378efcf44b6046239bf81805947a51ae1b95bd6d24b40976a198c092d988d7339eb30ecc4adca08486ab679c460f2a354f82201f2112942b0f0bd893f0e554a0486d643b9fd26057c5fd04ba3d70ae6d1bd14c334273046445f0a41c42fb7accd98aacd88deacec083728f32e07264e9cb906969622ec05e237043a61a9f15f4277e57fa7a49ca50190b50e7a082074a19df27ad8d4e493ce048ddb6f08dfc0709718f9ad9604ac875a5a7755fa900e5b4661f30ca7a24fd7baf9cffa7e97bba9ca668dc55cf78cb2c4bdc3dec1033d9fc69b3e698581132756b53dbf71e7709dd698d11bfc27fdf47b75544955a7ea7b40b05a722c41a1460755ceec6fa33c3ac95b9383bdf37eae99876a046d124fffa56b1a48c5ea66124d2e00232e6b26cd3142480348be7584f3dee1be37b352e31ee6e98e95a702a35d5207a6aa310d5e85862a924b1ff49a6b3c897a2b5a591a94065c91a7fec8cc3096282f47846f9aa85be6ce0faee0ee977cbd04bea588116a65fefb7547bde4a8616d272c6bf7b6ca3b8da95a55922760093fa76ef7ceb36422fbb035b2a3b46a15447593fa6c244ec46275ff7167f0e3eeb25435fb4fc1acbbbdd3848adce654c8158f4a11089cf5fcf553d83721e55f5a4a376ea67cdf428cedb150a0350a9ce148982cf46fd62d337c7d4f35a6f12bb0f86def2acd13ff6e2abb6357c1ce9dcb2a8b35ffb1accd7d79c030115941086064058e9b4284e18cb15ca2e764bb86f6457d908d15bf1fab74d4f5b9b25622fe2fc62f37b47d1c6f278eb4dbd356e01c899aba19a4daa81dd55909f470abb947227a52bb1b8992ba43111d7b1abcaef5b019447fd89a689f090a424ab67fe58c7b80cf328745751bf5556d7fea7655a03e2db388cef402aa084de223e876ec1d35f1e3f6ede9337abe9381bbc75e59aefec3fd2fe59b58064ff96725ac57e77154a88513e197753ea942a3823850eff48fb77e3eb0d1b1e925fb2ec5072704991b9004120434ea812b516726d55dd0916630903d0d05fc4d4cf8c21b22e7924b70883a0ba958fd886e5339b1d441d2e92e2337a225b84d25c0c',\n",
    "               '61e08000995f00297f76cf1dea9e6234fa0ae4d9b866d4fbc301fd1c8cc42747044522482f0e9d937bf7eed7cb2b04f0f69010132cdc80d3568814d5bc0dad2fbad0fb73f1cc28a0c3f6034a870020aac63cd3b9c188c17bb6faa5119ac7f3b7427c7739ea5fe8e4a963aa746282b79f898e943a66efb7c7d39c5e77fd567c10b90207adf1d0e934b9e3b61518f046f5e575841c20e9bca2cbdda0e1ab569476b73d1f8245214c1cfdea4f5744d9a9bad1ed88df0f391044ddca1e7e00158adfb6f4cb849558fdf1f56d70c7d2d7e26215e40df83f8f561b9dfdcfc46f6797eb80e353f39d10fa4216127833c8d976c2538e757cf3a844d9c9ed83a433b842cea9345cd4fd71f5ad1219042b7799d48fa8ec831768af54b22f65c364ca16434e6a54b46976792dfc81faf780b7640ccdcc90ca714d0e08030ebad6797aca5a12aad56cc71878749ec062f7910c80037b3a1488c1753c75adf40ec8b9e2073831bc3c760d80f08b6a4fee6113684049c8af047aa90390982da5ab05d09665b830598bcf6b8c642d7d6544cc72d9fda8dc4ee1ebc39c092e00657a0721b6267cb0b3f87df4587e648481b81b3a21a52919af583a05f3e844275c670a0e436b8ee3efaeeb498a6591259ffae16066b9dc1c9a3c402c2df1e7064997401e753ade31f0ca64acadb57820f72bbfb6a920671ee7cdbb4062e3f9ed5791b4adfb87ee4d87df6a16b2f8c84594c7a30d82269683fac19752f1dabf2acf8d5dcf156d607a660ac351fe658e9f59035507289b1bdd79f2794f7f9693ac80af693072ded16dd78ff50aea3d13df5a5600f15df6929f7339d03cbf9869c3136413e04f3e33b9c827f24dd24c785b49a677406ebf452dbcc96932b1debab1466505fe17d72cefdd7330f1d716ac680c6121674c996703ec955ce36e2e0ee8c1fd02dea6b4a566673e1072ebf085a43db189e25c25c33d753c0f1a74ef5e920c33c36e1aa630db4e4f698a5ee45edd990e133d089e90cf533f0ecca09ebc4a223be72300fa328aa891ca0aedf9b6ca5e29a639aacc6fb810875c3d0c0e1ba458cb3be79aca576729190f583d09d62140072c425d2b22122a31ce75549bfdbba413b390c854d82f64f825a23e0a288f5219d24c3badf120bdb3735d9ff42cbe81ddce20f74c21b1a95d396e547ca892ad41cd241ec3c9d4a8b29613d76957021c88297908bf4afd63732ddbe1c1ec134722583bbd69648ca12c4d0ddf45ca534eb4abb87850867850636e323fd92c0f8558decced9c8332122e65fe0456b54b6a05d911fd039fd240534959dd72e127cfc10980263744ac6fdab2f6424946412f4468bdb5556f51c4f261c2ec60dfc14fd083cd41fa057a278d9b4beef282cb5db301d53a86760eda3cf53c45c339e2bc3df0832d56faed5bfe4891c7e338cfddf7a7165837af4d98bc73d8815281a3cb1cbf61ef085a3ed4ef9ed6f1818fa99a9932a7296e9af6fa8c2ed191e7c22bf5854926890a4937654a8196b26a050629978cd3a3179be252b32fdb9bd5b35c9aaed23b1299e12889ff9dda68523b2eab81eedc3d1b1b7c41f1d00f221fb393ceae4f258b8fdd4c278dd3a41000c7eeb2ebf539b8ad186e84511e6e001ddf04ce23c81a5a9ef5f6a567d2f3076413a00d5b63440b68c592dbcfbecbee6f56960ad86dd5ef76a6e1705231feac3b500d3740d5ce024b06cfb5382e1e4790b520',\n",
    "               '61e0a000b95f0a4d2fe931d6424b16eb695591a9352b6dd4b7dc39ebcd3832b31e3b81c636b12f6534e4faa3415ad7d938ea2b6d657ba39be81ceb26b69e7cc199c3fe956674b535354aa679dddd2fc4368dcf6990ffc0e9202e9087e3cb3a2b41f88da786a5da82f9322ef8b5ea6850eec9f4c03b1c4856cef1b7940be29eb40f7d0183d70ed0c8144d2471b829ef027c08a5c82c244bbba7a62970db7350d022cb04badf98d97f82798b0ff5b6bf454a6abd56feeb7615afafabec038cc6c8156abdfd9b09817a9592436eeb9b972e6edefa290a3b159a82347228db12982b3f31456ae092b88e1fc182d7614a0feef3d4946a6aa22d04a3a5b9cf6298438c511764138f714532b855869fcac9b3481ced0fea4a6d06946f5f8f335997317b1ccddd10194937039c01649383810f28fd547992d2d82a0ea3352d888b8e8ce2169a84f51871c58cbf49669866ec2f2661752eaa2a7e62d37c9d45e8ea3ff0079ac733953db863dc72b3c937043a7697ff60a2f155452c10489f95a3e4d4b79827063cc637fdf04ac301cdabbfcd8dbbbbb4db9c8ceacbb937018d85ffdaf9b3bd8a8b8caecc4364f33dc1b338aada92357e591be9572085d1c0bdb7400c35a2cb1093b3fcb3cdfcea7ca5bfd0203227ef3e6f8086fb59e84db5e9e0bb64f643783c5eb2f99dadace4087e0f41684783b7b8cb3308ef2af15efb3a1a182e29828662ec139a400430b71c5264c382bef77d72d7fe59d55f6ad7eee7a74d31576426f6e2da1b596eab0d22cb4d4b361ae907d1610a85aad8ee3926f126b71bef0fa7401b75daf1bbf598341d2cf33210e8596de61c4f9c11eff7475b6380d290b90153410609e6d86e63388c759ed1f7768813bfb65bfd3559c3955ce9c4c231ae16ba9903e97e6a7a6e59be919f6aba0450a3129160b7d34addb681c3cfece16bfe982f55ed4e932b719d2e209422aa405afe8181fbd46afb5b12c9039fd426b0296a5990ccb6f339b8c23f169a26aa483adecf6f77d2f38760d52397dbe0d6416139d7708e77e3c86e23a94401b748358f3f08f4b37347254aa6b83193b5e5568bdca6be55ae952104fa9c898808a111a1d921faa2324526a351b1f4e4ff378429de46160273e88661e25655fc86b20278bd7a2e6fdc3c571e232f1b3241e6a64ee0f87c819ee9ae1dc51069a8e16e96c14ebda09d6c63820655baa56f6e70766f5cc9bfd8aa3419f1140faea82b032e87711bdfdd61c2f3453482d8fb61662babd7208fd98efa927f905f282aed70eb4df5e73f8a564634fd55012d12bf711beace5a70d111d542d6f05f89c97f585d04289a165559f8d4486be64bb6bc1cbe76b0fba640c09679a81431ecaecbac1075d52739037dc82afd59648a544f42948688f37587e488fef8349ac8a5fc913fe7dc5383bb408c8f67ae13d13d9ab9099dfa1114cdd444bb20ad7f4c485502d544e02187eb9fe7586279b3ba33cd02e9ab4e5337a29b59dd0c515db1b79b2ef0b4511fc1c612e436d9c4bd9f72b585986f8794e7d001c989852610f9643c0fd4d18650095095e468db40450cb31f765c8bd0658cd7a627a521e71d3de817026d75c18bf4ebd707c1497dff0cf7c9d607474d4acd81b93e0b34a49ad69d81b3222e2f3f52a003c65a067b4b5f41012e699d9ba97b9a941697a19cb63ead37756b7116075de4fb1cdefcc1c486c0c5e15926c73a830654f2c87e3b8618b1c8f96b6b6e39d022b917a6f791ae5f072aca342892f7e376e599c761f4881d49edf4f671e28238bc87fcc7cfb9bce153332cb0c58d83d5a51287b873f35c9ba12ed26bd395f6c79b12b35fae82c8040492749c1d60e7bf9c46f11f0bf1669cc87a3482fb7f191a73eaa9e5ca26c0',\n",
    "               '61e0c000d95f185a553f6551e531256702b7f1be563dc8f6907c33d36da32931a608d1938a600e108c231d1c8ab5ad259410b4429558a47a1bb5bb3a3d4a15beeb7de88f17aa554b024494a2b096e7114af859e17b6b5f880a3f8e4668da05d986ad5dd8da96c075d1ddf12f20a8718d96a90f2d2b433780d801fd8d98e7650d02a77a38c951e81be17353e65a5443977d3b5ec499949b1fcc819d078c3aaf9d05fdbfdf9b3cb261314878468e5fff664841b5850393c441931438b17422cdd40e5c67c61bfe22c96dec7f435352686d83f2b7a45a68c465345682134eebc2143c7397e4f5ae5b6f20418ae12d4e3fbb9202d891926717f2f79efb15c5a81f45e7289880ea583916d936ad226ccad5b4417065adef2d091e020a68c030c4c33aa896a089b0e6bed21a87e805c4779cb81872bb982771d61a01f897056e8be2dec1a043b7e64c9e53f5651270467009c0aadf0050aee3af959f831ef2be5d41e9ce085b086ea1e115b608ed1058cc8f65842ec95b1b96dc21417100ed0c4c1d455baed762e9199198812fc0b619b205a03bd538ad99fef591ac5c14554ef0be65e6d2c783c5bf79b54ff601c19423ecb160e00a9bdb5f75cd80dfc76c1dfc3ef20c1b2d6b3d574b98e9ca232bc6698970b6e6925cfbd0899fc39573f5cfa9c1b481042927e4699ec3391ff944af43aa6ecef53fa9bf2369fac78b9dcab5d5b16f974f1aec465756e4c19f7e5ee8f2a9fc61bfbb9bf30de607772dd36e8dad0ff37cc1f6f99fc44524296137f1e2f61aa9e4a8aa3b6082a30c0bf06bda311bdefad7cf392bacb824c0770aaa88cbb624e3b17d6142136c5aac4e23ecc20561513f963a04c014f2945a7a33dee0f57cee78a00c10749602ad415987f8893825b385dfb4cece04ef01319ec893bd93b6bc9c90d79a8e4b327d069cba0b4261dbac4e3ceb7b52ab65b5753ded2cb57fd50b5316bd69eb087d24ab3446ebf23f31f5f2a65cdec0cab430d639cad20be580d4e3854785f49879fbad595a9c3d1a8180b475b859eadf380391e0dbfe7bc0e0b68c9d583906112ee5e485b8b61d2dc363fd7b11649b093c7272dcb8a30726c17f1ea1ef17a1ffd6de4f68356a75900c6c8fc1b7472666c79d21964e1bdcd19f3a7b10369ed46c662856e7b248fd38dba2b13eef95d08c61dd5c66f284e1369e1120afafe08cc948d089004f8712b35fb06e58258bd2bbe44f64c653810fda915bc169216b1831c45d1b0c7a3fa4d5233291ad3fde3d27f9a0ff93ec0d22bd477fdec79d92d0f6b1580a994d78ad5d0ffe471d627583a396b7b019f1143f484fd11eaa4304fa64ce06e79bad4312dd8072d30eb76b5a5a15e7e953ef36f9ce6f61a0dcc3ff060866df1067796722595e19acb73baee0332687b1e01a51d86a8a113cd6dd49992067b5b2016e4a1430a88bff7720348cd5f7a6d6b4fc8faced7ffe1a00c51212980e73f2dfdcef117e6458d2c1c9019b910481ff356c66837d766575397a01a5a8f0e59c623789ef3a1c1a7e6742565c2f9835ee27f9809b8fa1aedb2ad37bb5773fa6dd30dc024ea4cf3350d6ccb235bc7def54ec6f90ca00a8a198d1133b8bad90f3fd0cd68d3dd9e47a7b661b1169d6f6aca93f91820e8be4dcd3e00f14b381ce351f81576bd56f6efd3fc566b5c470f362dfb31389755d6bf01e9422f1eb4428802eb01c595413903c6761639e2afeaeab5fa12442fbab47c8c251a5823920397817d662b9b8c907cf9aed4d080ad3bc50cd57370a51fa98913eec947172fff1d66cd731933987c3333875c7e2c877321af4e7f17add638650a463cbb90c7b8d3c5ddc809d06cc184aaa1154bd27c4dbfc61b66b73627e02c5c011285f33ccc37f8babdd4acb2a20e588595924c0fba954c99b32e2a9a518822c41574db282c3d8a15ce7b401188867e4253c4b720f7367b3a5d74f5c8960',\n",
    "               '7c81e0e000f95f15489cffec48a09de8210db01570ff255fdd123cb21eb17bb79b3726730f3881f17b4f9299bb00a4ca35d27d69c74a8dfdca73ea45e6c7ddf11db5ca517555bda59c3435ab0aab5aa9612f6ade9b7422d1f5edfd8ba8332528a1df447d941700a8ee7724a572ce167bfd64adf428368c0023e5922806ab404044d4529b25cd032aad4f900becca991f242bd1a1f72d698482030783db783ee5dcc3524d5d3194243746ab6a5fa124d478ef77d0ab222a8f6054a08b275ff93e4dd69b9c901af1ccedfec1d3d96198b67e509060eefe0e77be3932c0d63baf6559bb29699171bbf5ee4eab6625a1429a0ec25d28777c35eca6b1db02c02f7e6424846a7b92390cab7c3fb9bb46bcba104672b5c5022eeb53e0c96c04195f6306d99a327926ded8a8b618e60ebeb5d5b3fbdcbcc24b816e65e53c19349f173b38e14aaaf9b6a769cdb164889e5d6cab9444a63626440c409b9f9d55191e0d67e3d774deade1ed1d39d78adca9251e060982ac6f2cf57492324b17db3a631d3243c87c8cef1a87a552afb1649e36e7be7314f8ac7d6f421d601e0779540b65de964fe4fe8b578f202b1a54abae9652a44ea81a635e019addc1df46e935969222cc6572466261fda3701499927fee002094b587492d8703b40e7934f8c74de7174018090d7e2f448d430da5899ad639ea1e8f57b6c356fc492a270a1bbe719b4c118309c9817eee3ddbf8473d70b2d7a593c152a69189d65e88ef6d44c6da69b6ec9e870fb3f0fae455a3c3b9fb898ea963d4b97fe6d451214d97977d5d4604306a5a77ce890bb66b32dbd2bc88d0fac0eaf162acc04a4cc1b06e6e283a5f6f60a532bc695c21059b918590d2ef8acdc26043217df0a2aea516a40b0591de93174f6b045598051d80b8fd2d6d7749d7e6e723b97593fe97a7cf2a2a722aa683ff06d71669d2ced8e3644b1e89373624846f8a005935cd6d201505a01ddc342db15ffb97e716a48bdc964a8b904c44f65a2e6e53c27e2678f62b0b8d82c0c318b92807df4bfa9753aff2f45a5a9c3443a26ea95df6acf1d08e47278afa7e0770eedb70637b7b2681d62d2a9f9d9430606a8eb5bab9c9b2f5ee38244b31f032bc161f9f39a4e18fad5219ce007ccbf27520d215edfe45733e3bd3ab822384f797c906f4f5a5b8858f37eef8ab2f8353c904b20a157faac30159b8cd276a2ee0233e17ba4ef9a6d48fb07fb0e8498cdc7bed23f72e109469a7b6299628b1778b8d79b8ffe2b746636da6c3b00ba91502b59695a0bbc33f1ff67fabe61556f7e054d81baa28d1227208d1b9aa082cc70ff2bd3e3f89021ed6ca1ef6f78e5f48002601d0cb6e939aad00a45b943147db7878b4c7246cf01624d73e0207ff2afaf813a18c6b5a0d362f1bff490404919430ee09c0651ac802cafea483d404d449bffa3d8c4c740d8e2ee2ad495e790101bff9e46446b5496f0a4c91bf9e4e14cbfceb056826cc0a4c317e4c270025a192c1046a0883d1a2c827f4ae70351e1a1c00432cccb94f3883ae5fe768796762dcdee6d820e167b23a868c3abf9b5c7f5c1ecd588e21a65e0532cb6424d4b2be8671010e75e7e9896adb183a1d36e0984e44585bb92fcb30dea95a388a395bb1b1a23b94d59e793e4b421457835b63e16f882d5a6bd89a36ed5a1b052db72ef9623f08d73d9997738045f360becbd577f3f76d57eee76435121915dc29022dfe05e7b783f9d5bf0ac2d6a54aba1b9fb9444cfe369e728c6391a05f566ac542650ddd88ffd7fc53866ffa030d21c65052a0d5b5a7118a022f92a2328fb78fd86cd5811f695e12a4e0523fad2a26b70667ea08427a4ab4d49ad3e5820ef900664967f73770549d916fda4b1b1e7a6c77cd27a247c434763da7d70bb87429d3eed32d46ffde9acb30b56ed71908f4b903859ec15530fd586a7d05be08a63212a3a59a521ee57ba881def951a44fbe0e3275c04e39017686b23daa5834e55d9ce89f7c6f71093aa4e1f6d1',\n",
    "               '7c41130fadf85500ea90697430c73b9efa3ed8c5e8d6325be0ef08f1f5289be3215027e4952de1f348b9783e2d6d673302efd517b1f9dfa2922cbb501291d111c19ade75274511aa24686e',\n",
    "               '7c81e10001195f098d450677f58539e131ed4fb48aa1d7c63d34ae95599b5b20f2c0f87fe4d28271c7b49f09952f1b78ad8f75270ecbe21b6a19864e8df854da648446500b39b96eacaf4f57175a3c5d8d1d6f7d4fc9cf22bbdc7228f10c15f7f8a5f86cec34586c2f36fb7e0eae1181a22dd00addbf58192062def113b936e3d7fc6e2f8090b324c97dc3fe437eafe3c799e97189bf0bda058b370696084f41002f4055808d1d864a9b072cf492af1b3dd57ccc9b6d49cb4e2db893565cfe0aeb007902f95176d85c08ccfd0d1c05078d6392b81f820342f2cab0c86c634b1bfaf5e209cf11c8a642268cad48e8f2ee34e41f92b17f02adcba0bb01bfd231cb3f5ba0455124a69f87ccbb62e9b312f64a0ba486a4ad7eb5f27914ac258f42a4257a55c9e76f0667fa126daec9e9b5ede66f0335b1fe42646b08c0fa0ae8c0cf999a7c7a334a0c3ae7b93042d578e84ec64f4d8d4546d379839dbcbe5674fd622745c09d2b6cc3491a3d3276aff30e889429149cf86bbdeaaff3c11eeb4745552a8ce1b3118af7604e3bba2c9e0e739f4ca4525dab9865c293817d0da7ab955b2dee4daca54596a9f15813ab5e928f63522331f13709f740618e916744c792dd1b52c2b56a0b5ddacbf4eb87b841dc422b3fe59146e13e66849b10d409d237f90c0cc41fd7ed02b55bfe53a2e7fc00d016a2dcc962a53ae829f01ecb397860484465c09d58727927f50230d12e127267d3cefad0a8040dc137525505c5b2d990faef4508ea13011f39b485354218aafdf2b0ac7c6ac49b59eee0af5f8688b32c83c678ae61fd94b6b1b7849edf05df6265d48c6a5f7597a8f609eb4155cd488249085f96beb450d43e6e655d67f9e9ad32cd250a006fb542a15e61b75a35ad623627ad915a743ed077cc7232666d89c114498ed170cde2b56d73f5807555881bba61635a6b2b6a66e44fb0e802e967a32b51dd83e60814b9c715cdfc18123208f5711d43e241aa6c4f97c5aae6b038f42bed49a6e45f6d81619d16358ae4837bed86680abd7990846285e7206dd5803e57d50adde04d2ae0a04fd8bfe5a1a433c2e7d07ff437c9d2819cbfc0ae9f1678c6cce81491f5764bde3f14be04fe77ad44525c60fbd6aeabb70d33cf59cf47c0e49f484238103aa72c618687f6537a4bc2b543a3d9f3096f09551c00493d03a1700f21eb2aee52bb8358c809d8cb1f1009f22b65c9de7accf92e22e487e6535906942d01064cd59dadab2dc13bd8075b8c05cb66e8bb4b23552f9f1dc88f34fb18799eed20c0e673c49234e915ad4dcc355baec7581172f06add9b573771522276726a26da746e6690d7481def96896dd7d3ab71071e04324cf00a3b9922f6d7e7190ae38cb27978ce55614514403c697efda4c09504bc135e1795771b9edbe9eb10f609c1b764f5e8ea9aaf76d7d7ebc1d59d7b12b662da8e34542a78f3eb2a099cafeefec1e9cf78969c83fe71c3cde9d9577d8758dc6cc296ecc7ae66380d7903df11f25290c01ff6f031645be53aa6ad08da956e08a1eaad7f8adad1da663f917086f12ec4dd0495ce8c5b7d6b6b039a8cdcf57b21f122bafb3da43d7353ace5687851cda2d369a9fd6b0793818ad6c14f57c135117db99626c173c1616353127a7b1a6fcb26f684577e0550a895b617385f4b531908551ff197a87c69cd2cf0afd3fed9060d353411e832b2a06524e00da0329ffec85398c09d72581ad60576853de14c66615f0cf305d9a7388f85f13dfc3301e343f1352537d55a32c335d65fe613ad98ebc9cc75c94319ab801d0fe45a7ab65f83cec6949a7e424cb97d323199ccf3be55d2e7a3bb13234f0ed65630bc6dc892da208a8e8b7a8c712702b6160021f7c277e76429119eb25e529fe70a0958c91b27ed5bd9c47760778b82a899cc7deb9ed418586144253cb7157a92b4f7df390e08ee2ef4443549f949b3caf7ab5d0f80f6fe58bd668bd61bac7b7a9528901038dc076af773bc8b8aa111b5ba16',\n",
    "               '7c41810768f495f53865628d58f54a8a62e431e30517d7d8b535b10622a14acaaa2ebdbaa1e74f38b2ed2a156571c9685903b36a9c5ae81db68e96a0a4aef739',\n",
    "               '7c81e12001395f1020828787041a18d14ab754b36d5c053ea0026feb6c4960f1619a582525f8cb8d7a89d030d9141d415ffc58d68d40fc5306f5a87af98f1d359439c5d064d327725825335a1d47684acf7c252b428d0c400ff1b0be5d91b1a0fc31a610cf3f7acb5ea2e2b14fecaf5aab0e21121315181d9322141924fdfc2536ccf8af67b8d5ae0648f8da11817ec41ee68c1b41ea68b1ebdd736449abc72d92fb72e495015aad9fcf1d257a15bbffd3230aceabf88d51e2a2d070bb67d4ea5af92d09967e99e982a891dcef9754129ec8b3d1fbd4695ffb771b4954de4b7c9858e4ecb425c0c835cadda3eeab84d672f1d4bd613de5e5662071bca42cc355fca75343cdaa66458c4c4a9a5c1d5b04977db0c24ab0a658482d199b4d216baaab4ad5cd30dc2f3da53611a4e1a57d60eb912df52caccb6573db57ca2d271d36455bf89d0b4844c59681b149b710d048ea0f45da8dc9fe8e2f164a74b708dbd09c4a190c48db3054c2b2057aea28cba670b73d114a6b91354eafc2ef5768a6661febd2d6001c5c9c6500d4a1ca426a0695895f82ba61acc608be74d3b48c59b6d2e71545bc7597aa3edb49f1da42be39cf28c3d3f1f85b41f7eefe06bbe4516bf1f3b7d2267e08816a9df259c450c1dae946a4fc2bd948c717174e6fabaf3fe2eac39781d5d94b506bcb4f750a8ab36eaaebe7c44b3e75cc884574f1205565d41b3a87e2d27c2214574d0f383fec52520af4f1bece1aa16c7f5f1f93c0ced30a99568f76699fce5eb8dc70ab80e7a46d0d60b25c8c47ca0bf3cadfb592d2c22317f6edbd710f120fb58fdca40f56e46bc44f86382146e383c414d1eb5d32e059770d9e4f4820338ce6fb522a4ea90f47bbb36e690a241369f6c17603b8ef503f2d519bfa896bc423585b578d200c1a40dbca781eed6dc34698b87fb929a55f3322db88a9bcaff90c79c75db5c41a228b9eeffb371578310400eef46b9b6d3d30c24b59eda63dc16c3e2f63173fbbee39056da6afa8e53c4a5e5198961989cb0a47c163141f5271debb9436d326e896919ba7110c74f6853144fd61b84193425e2b29e952ad30fbdd2ea0c177187b262f00aea09b69cd99caba2a533b0c07514171f78ee56f7f5e710752913d72f53d30f2cc294d8c1ba158945f8ececa914d37edf3776362dba2c4d7550c60f6cf5e920e551d774bc367f6ff5e354708f87576a3198e1f31f98c9ae9e63fd4fdb3f1fd682bf934549934576eca502f9ed01239f615b7ddbf4127f33aa4aa293df2185ef5543e6b42fb771ae5febc4f56db698bb3dd7c48897d64135e080dd7ab453afed2fec5adbc9b2c0b4ad048aa8c7df0f417db4f4e8c38528bc70c3c286188566afde41bb34eb2384786fb3afbac756ddf15764a175879a4fbc4bf101355a03b78529ef16b2f7bd90dfb5c66b9f3df8675f97bbf7bdfb6714779530acc7d6eaee676d2244b83a3b0f1813dbcb7f6517b3e149237cae5affaf627e002ea7e1c8c7bcf33f3f96035743054df4aa5e82a6ea045e4cbb4f4a891813af126c2b12a5fbe4bec7f90b3c5a643fc4c17c88e2f56dbbb302c22d8f2d3e83e2c3c7b51e80663b0e8c1b8f1158e5906a9b0222aa2ad2543154f20c58194aa6f14895168ba30ee3a256d5a5d11dc08af2458aa32f23188de4a2f658a7606f44a1a4d066f5eeb6d776848991b8ed719a74869d7746ba9c5dc3efecacd260ada33c4476c577ee0afb5a25cf51df32403f3e62d87e20e75d69c1275fc728de8c0ee5714d302ff2791d9a13b8223a85dc88ae3b4a8da1026cf60569cd90ac9b0f3ea5cc4dbc24eea0b121085b99faa0507650d480dd5dfdf48de28b76257b7560b6e4f29791b00c4bfa05edc8b6cc13033a031bfa0a6b04b0c512d6b090602554277a46b5bfbf9ea7f5c4dc131cb873e058b3ded6e3f338aadc37e461d7c7b976a43a7697d1864e9fbe7c3e4e4a911be4ddee57d11cad7dbe4942574e072b4a47ab901034aa0851ad42b4ad5c2',\n",
    "               '7c418cff00dd12e203a90c1eacd1f6c1eb076a5d6b282b95d33319b63a1c22ec2a0fa091297215552d578fe28b345265d10bf808b523cab97d178dcfca9f420222dc71b9b2c59bd4f4e4b4f05ccda6f7d04934c52fd0cee09615b7ce2b4203aab3363a562511f3397af57925fa821cf810bb10e5c6a2b31474cc18be3e257f021bb336ec26d17a4cfadf193e03e68c2ea57bf8c6a56e031020',\n",
    "               '7c81e1400159ff13d2399642116596f44c2e5f59460b59f86d17dad0900f9dc8e16213eb47c7e923fe34c37f3de54f4dffe2bbf87f585947cbc4bbf887d8a00ed0302cc746eede7c3df1dcfa0296a9c817d14cb64ee30e201b20d15bc6a8296f402e59ee1aa07bef320aa831fdbfa3ec78cff9beaddf75dad051973695a2e4f937fcb464f7eb21de66dfe079235ef4a3420915f9160ccd7b41e5390f5c809631ce7d80b39abd6a399f90c30ad098794422a0d01b84191f68974ad25107202d55a879d571f717a454fc1611e696e7f08662f93b820be84557cc50ccb0fef45ce7b1f96ce1cdf0b2672060c2b873b917ad08207ecefec02eb08e2ffbc88c86ba532a6c4893fa263a25b414cdf90b6a397617115235751a05f4d0056c36d8dfb332ec64b338391c3c1b6d6a40e1e6c82aa7b576954c0210c22cda039e8f3b7d852ed24fa36c7e18a98a07a248fe1109f2a532e82886dc10ca15a08115f0a6043e3ba31ef7ad60c9c918613239bf7777a20d58081024a5e1c215ace7649096c0ebf60a4a53fc606dbedcb63363bfc88960bc2964ceb6dd390d1fb7b06b08b619d8a7138886e813f794678e3e11ae4815914fb68269d22e51158ae6fb06af49ebd1992ec3147e5791b7ba929a8b56be703214e8081b6ba34f8bf0167dcecfc805297ad79598bd7984758994b370bdf369bea15cf38daf7bc41d86d0607a78ed6365f2033b3b40a87cd3314470aba97d1edc88c733cd7a6c0e1efa95cdf0573b4912cc9390394b41831f473149f581f622dfc1d2ad4e08894a4fa04802eb297f7a9af5910a662d2a25002cc9fd132b53b9867b6f09bffdc318f4ecd41b864efa237f507de214d69798de26c72376e83bbf27ae0c041a74517932be520284f2de2f34fd734591834cb765d9bb1a2e1eeea482c2890e850c6a59a9e7c38d29dcc81a994ba5b6c38a55e56246c982b66149b67f1e96289a49c1107981a07c27f1a3a8bd4605030f22fa0d3ad6de0b4daf6a9f43bfa4b01c86ab67702486f59fdda9124fc255860013db12024090156b498784618ef16a3e195c9d3e253a10d6ed07b5179358d52f9042e3b9cd23a37b2de0ff122f9f54650d52f9825f5a44d731eaa102d5c44609628f0636c209b720ccbc5448234536e7b80a81748ad8ae18e62ddfb461b05680be3d891f694e35671b71d7a76c8ad269808b939a0ea3ae00e38bc7d2c89bf01c462017a0ad96458d5029399a6b10311a017635c9f01a5b1445f1e6c5f28b3d2a3f403163bc2877f0a7db43468b1990fffe0bf4a4bc408fea694d0c5d2b6180b4102c47a1275d7bd7b3d4bc241a7074672fa0b85b869fa18bab5cfd26b18ec27f6a8e23b889c33d493cfef7ef41d4f8f92a44bd2d05579aab6e59a9d6f9af0a53ee54130bc7d3bccbe24fd930538476d3108ed529985303143c42bff2229b2d9de326e8e54f47518485eab71b05d846224b2210438178093373ef76228caba7b01c3179e9be4a0d4baa7d66496d13ae3cade955bd6f2a64918c92901cfae9afdc7058ccaf80dec53eef7b32d6938ba8f8bbc40839f2d333d5b22968994727037357ccf90d0acd5548a71dd106c54d0919baff42b8d77ec690f0ae451fe3c6a527e44fb8f8a64044a5a64d3581b29bedb1aa78ed1711643b195541b09488b8a38222eaa1849480b66067cc632eb34947f9e194a82d106e39a0fe550f4c5015988913f6112175d5a5ff2aaee9b56cb267a10a8b541adf42739ddb8e63ccce494c217c2f20802b3909e1d8587751288a006ea5ac79372933c8a50c1061c0d5a0f3e4d1c2e7e9fe1abbb7c6025e8429b95918b4e87ba8ffe9a850e720bb199dac75231d6db51e8408effc6585f881c45eef88884586448b60f466ce3f777a093c5fc9e46aa2942f6b44c37bdf3d0205e77fdf289aadb0a52ae69897522d9ba053d7c8dab8460faa4e97001919dbb7303fd571ef05639cbaed3f8a8a1365bf9e883945ab56fa54cdee757b48599f5d62b7ac8a01'\n",
    "               '7c4142a813c3f6829b7646720a8706867fc091a351f7e0ec3fbc7c4ac710f2852572a856e961fb4f5c69d4181173f15a9c986e72a8132b6b49edc5ca9c837458599df074cbf3839bbe6d0fac4ba6172ce70d3bcfc3453c71a79ce48b0c3057271b7b7292fba234953dfbaa87134b1fe44a9c5a16638acebe09fa56ee56a101492862799163d0145425b63f5a1d1003df569bd6f56ee8f9f8b9fa7cc34dc1f79509b77a4b76c2b1d63dec13f5bfb3acd91fb7a40e3c699d4092d2ada2298549859f86d273fe86bbecd533e7e7e9602779cf9abdad2c652a5eb4e70fbafa7575af511350a89c8b8999308d2edac95c2d385a3a0095927173b2229f89218673efd9af1ec87ccaf71b366c33fe797730e348c34832523aea3f2deee8d0da3622e3a150b5a2795614e59c0504cf73bbf78c02fb8ec713f35b5196ebb15d7f53a0c51b06f2e6a9e93976cc4feac67be0bb500df3ab21098de9c9eba864ccb2248b791920e225fc975e3497beebd25e071f8771f02e43b25c6b5698cf7f2e7f28e1b809a1ae11578ba1e3cf98b259eef2bb01cb1aa5c97c285e82ffd6df440e83e8b891adb1433a705234bf1fccc99d37f066aabed564b20d965b6ebcb3234cb2de3ed9c5257baddc15eb1ddbcde0e601edaacedf51e031bb52a07e8ade02f699957d236656cec8a299c1d0c3f0ec92317b5d635f4c6f89d3730bd779254b0040f6a47f8211d062a28548620f792b5442f18cb17b21e33054a1856e10427d850404f3f390510eb1e6cdd304188f1ab42fcc58290bb7129c848ead4c7b49ea522c83e41fbe73f7860aea661f039d97c614a4bf56c6383a2e8b5109885d8ca7d02758f73287a29def9825a76abd40bd6129b31ed8f7447e9081a876683b1e51dab4bccc040ae27ccc42e4ce640bf64f9c9dbde54f8e98f2e56859623f632d69991463e151f3a224079c1eb76378799c1e6aa834eb214bdda6994a2552093133a527bec7dccf11b8c6d8c1b2f97d8b491b4192d71c9a9b47de62a0b5c8bf2a9b352bbc278848be1b899ba7ec13c54f0b2dcaebd1216426955d226d5f514fb78c2491811b2e025710f92f85d27b3b1b617f3910ce15966bef867e73af21fedf048946e6465beabe50c0c0edec30d64bd1a755b31a24f0fc38ad89fd12e6e221b458b3f553b9551ab8363812b522fc82164ffe961621a6551f3ddd6f5e7d129b3b33801cdd9c5c10'\n",
    "              ]\n",
    "rtp_payload = [bytes.fromhex(i) for i in rtp_payload]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [],
   "source": [
    "SEPARATE = bytes([0, 0, 0, 1])\n",
    "\n",
    "\n",
    "def parse_rtp_payload(rtp_payload: bytes) -> bytes:\n",
    "    \"\"\"\n",
    "    :param rtp_payload: rtp payload\n",
    "    \"\"\"\n",
    "    result = b''\n",
    "    nalu_header = b''\n",
    "    nalu_payload = b''\n",
    "\n",
    "    nalu_type = rtp_payload[0] & 0x1F\n",
    "    # 最高位必须是 0\n",
    "    if nalu_type > 128:\n",
    "        print('first Byte is invalid')\n",
    "        return result\n",
    "    # 如果是 rtp分片\n",
    "    if nalu_type == 28 or nalu_type == 29:\n",
    "        # 取出 FU_Indicator , FU_Header\n",
    "        FU_Indicator, FU_Header = rtp_payload[:2]\n",
    "        nalu_type = FU_Header & 0x1F\n",
    "        nalu_payload = rtp_payload[2:]\n",
    "\n",
    "        if FU_Header & 0x80 == 0x80:  # Fu包为 Nalu的起始位置，需要写入 NaluStarter + NaluHeader + NaluPayload.\n",
    "            print('Srtart slice: ', end=' ')\n",
    "            nalu_header = (FU_Indicator & 0xE0) | (\n",
    "                FU_Header & 0x1F)  # FuIndicator 的前3位和 FuHeader的后5位\n",
    "            result = SEPARATE + bytes([nalu_header]) + nalu_payload\n",
    "\n",
    "        else:  # Fu包为 Nalu的其他位置，只需要写入 NaluPayload.\n",
    "            if FU_Header & 0x40 == 0x40:\n",
    "                print('End slice: ', end=' ')\n",
    "            else:\n",
    "                print('Mid slice: ', end=' ')\n",
    "\n",
    "            result = nalu_payload\n",
    "    # 不分片，完整 Nalu 包需要写入 NaluStarter + NaluHeader + NaluPayload.\n",
    "    else: \n",
    "        result = SEPARATE + rtp_payload\n",
    "\n",
    "    if nalu_type == 5:\n",
    "        print('IDR')\n",
    "    elif nalu_type == 1:\n",
    "        print('Slice')\n",
    "    elif nalu_type == 6:\n",
    "        print('SEI')\n",
    "    elif nalu_type == 7:\n",
    "        print('SPS')\n",
    "    elif nalu_type == 8:\n",
    "        print(\"PPS\")\n",
    "    else:\n",
    "        print('type {}'.format(nalu_type))\n",
    "    return result"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "'674d001e9635416024d37010101400001c2000057e4010'"
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "v = rtp_payload[0]\n",
    "v.hex()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0 SPS\n",
      "1 PPS\n",
      "2 SEI\n",
      "3 Srtart slice:  IDR\n",
      "4 Mid slice:  IDR\n",
      "5 Mid slice:  IDR\n",
      "6 Mid slice:  IDR\n",
      "7 Mid slice:  IDR\n",
      "8 Mid slice:  IDR\n",
      "9 Mid slice:  IDR\n",
      "10 Mid slice:  IDR\n",
      "11 Mid slice:  IDR\n",
      "12 Mid slice:  IDR\n",
      "13 Mid slice:  IDR\n",
      "14 Mid slice:  IDR\n",
      "15 Mid slice:  IDR\n",
      "16 Mid slice:  IDR\n",
      "17 Mid slice:  IDR\n",
      "18 Mid slice:  IDR\n",
      "19 Mid slice:  IDR\n",
      "20 Mid slice:  IDR\n",
      "21 Mid slice:  IDR\n",
      "22 Mid slice:  IDR\n",
      "23 Mid slice:  IDR\n",
      "24 Mid slice:  IDR\n",
      "25 Mid slice:  IDR\n",
      "26 Mid slice:  IDR\n",
      "27 Mid slice:  IDR\n",
      "28 Mid slice:  IDR\n",
      "29 Mid slice:  IDR\n",
      "30 Mid slice:  IDR\n",
      "31 Mid slice:  IDR\n",
      "32 Mid slice:  IDR\n",
      "33 Mid slice:  IDR\n",
      "34 Mid slice:  IDR\n",
      "35 Mid slice:  IDR\n",
      "36 Mid slice:  IDR\n",
      "37 Mid slice:  IDR\n",
      "38 Mid slice:  IDR\n",
      "39 Mid slice:  IDR\n",
      "40 Mid slice:  IDR\n",
      "41 Mid slice:  IDR\n",
      "42 Mid slice:  IDR\n",
      "43 Mid slice:  IDR\n",
      "44 Mid slice:  IDR\n",
      "45 Mid slice:  IDR\n",
      "46 End slice:  IDR\n",
      "47 Slice\n",
      "48 Slice\n",
      "49 Slice\n",
      "50 Slice\n",
      "51 Slice\n",
      "52 Slice\n",
      "53 Srtart slice:  Slice\n",
      "54 End slice:  Slice\n",
      "55 Srtart slice:  Slice\n",
      "56 End slice:  Slice\n",
      "57 Srtart slice:  Slice\n",
      "58 End slice:  Slice\n",
      "59 Srtart slice:  Slice\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "60"
      ]
     },
     "execution_count": 17,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "m = b''\n",
    "index = 0\n",
    "for i in rtp_payload[:]:\n",
    "    print(index, end=' ')\n",
    "    m = m + parse_rtp_payload(i)\n",
    "    index += 1\n",
    "len(rtp_payload)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {
    "scrolled": true
   },
   "outputs": [],
   "source": [
    "with open(r'C:\\Users\\13438\\Desktop\\rtp_h264.h264', 'wb') as f:\n",
    "    f.write(m)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [],
   "source": [
    "a = '7c05c8cb7ef1ec79674331e90672ff67ee3672f15537bb980d466663f022e29d7919a8c8a81b163e39edaf0b19bf8bcef2f03d419c35b4a6426abb2a6938d4d2ec7954b432ab9e729deb3fab4ec25099a366533d3bacfaf9bd33050f9bb12b4d6cfdbf6e11676e4a7bdd033320e80c99cd44c82b8ef1967bf6fb54f7c5cdbb904b9ea3f2e14e362dcf8df0d5cec0b77925d2842a74751ab2e66b620709256d39ea185e7f386cc7ea5d261194a05f86bd8b7cbcac513a67e5c2f1a096ea34f8847f7922e2cc153d59fe90c633e90c8791be9fd893a8faedc6bc2ad47875e7c05fac34e342d6949d4d8171e32594e4a3d913efc3acc71f3db5cf47ddbc00ea5f7ade3fa656915dee3c800cf40d7d965ad749e83a4765114326b2e030d109d68cf381a705993a5ad4657c2d4f7db05bb7c5131635a4ffce4ab67a0a0dc2e06a4b329e04c8f2bfe8712bbde9f0c6ff42ecb8279a74a8ae756b6ef42fe0b07013e715bd8e0d749bc55f8f5d075b6dbdfdd4d14f17bd54152dccd3b39d67ae77dbc86f22ed64a226d1a27c45cfd90d9f8bac15bc4267c76baf5e1525b3ef8a5bdbfbfd864404f620357bb4ed462921202e07b85d720e12f723aa8dd1099feb3dab05207d1e0c1df6d68d6c5b62e39eb2aa374a4b7d06e26d5a33ab90e1b681111691b554684fffeb30a65d7a0b2b244e0cc06b4385dec98e8d6fd0a800cf9a3aa5268ea12c575672e89e2acc3f81fd9ac714bb0b30b8539580c6bfe8faadcafe1e530052a1e82f984bc67cc776cdcecbd08d8848db316afb10dc0e7224aec8f2ec37537ebaf47882564025b845a6c2142ad65d51904dbb0287ca231aeeefb9e8a274c0201dc62786643a7a8c3ee00711a87d1edc6cf82d0ad0c4073dbc49682a623758ba9b6919cdda47c691c91328aea4b5b50584f56525be9e981cb578bfee3b125d8ca262da13fdba3f844697bb9a09a1745e45cd74690519c83e6a6adef96cf07e56af542a6c37474bb553fa10909186477666367b399c44b45f62ec2f743418c1daf00156e92bfffea6f8bdd9f1d89b40b8f74f0d58dc81b49de4deae631fac6d123176352ed3a86cb2dc268c5ad6e61f637535d4e5dcdd543785492221d7914be5e9dc3e28cb70f0f4dbed7d1d7833322c0738b4523c02712ad2c460af5299141738485a33854d3d90b6616c3fcc612f6688881fd5fca47d2f95a5aea5aee000af1c1dbeeb9458d639b1addf8cb5cb7eae6820f4ad81a234636d79157837cc965754d6c5ed3579ef84f1067eb1fd17402a7765b497dcbbb8e71b3b5ef738c45ebc4d046f647f481cf1a9383e230c3a406be971df5f4dc13b62da0d78b94a5519743bc5553758c6b43ea3167a3c7cc614de30ccf6fc5ce90e850d9fe510ffbefde98f27de7d0dfda05b1f538462cbbb468c2b61236253aed3d66295bfd96d682984df50d07ea87066e81cd8fe6f3372ac47520e9856f6fcb9c775937a6b35c4158258586670a22b74b38639fff644aeca94fc22e4f33ef3d37f3524acd0c5317f12744251c3377f39ad5da5b9d4dfcd4bf754e2c864a5609059934759fa591d36c8cb532b5705bf7a36ab2b4ace9b384df207b295ce961cd600bb62c429fba3a4a6b050591a1a188eb51a2d307e8ef75f41769a6bac01302969aa1e2c1e84a026e5342685e9011b8363b447e3965adccf015a06a9897779b07bd6d198e84f52a48633f25f8a5662b4b37febbbeeb3c39675c4202153d3dcd75809354fb359b45be714c1bc638176e5ec59bc3b6892c5a76795990fcf8005b51562f8fefa059fcb1b11996252cf97b2fb7b752cf2046b1b82b32909ea93460662e82c143a0ff921eee66c9f1d55a1971cb59b11d124a137414d9dc7050aba44046dbb574ee7e18635f1839a6f9b43c60fd88f05ab868221b6ccd8334f49c138a3672248880b7eef89a0efded1840da6d3188ec5db45b5f562cad09bf2891a79077ceafafbf99a426eee86fcdd7d3c2cf8459f870e10b4fda4a714df'\n",
    "\n",
    "b = bytes.fromhex(a)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "7c 01111100\n",
      "05 00000101\n",
      "c8 11001000\n",
      "cb 11001011\n",
      "7e 01111110\n",
      "f1 11110001\n",
      "ec 11101100\n",
      "79 01111001\n",
      "67 01100111\n",
      "43 01000011\n",
      "31 00110001\n",
      "e9 11101001\n",
      "06 00000110\n",
      "72 01110010\n",
      "ff 11111111\n",
      "67 01100111\n",
      "ee 11101110\n",
      "36 00110110\n",
      "72 01110010\n",
      "f1 11110001\n",
      "55 01010101\n",
      "37 00110111\n",
      "bb 10111011\n",
      "98 10011000\n",
      "0d 00001101\n",
      "46 01000110\n",
      "66 01100110\n",
      "63 01100011\n",
      "f0 11110000\n",
      "22 00100010\n",
      "e2 11100010\n",
      "9d 10011101\n",
      "79 01111001\n",
      "19 00011001\n",
      "a8 10101000\n",
      "c8 11001000\n",
      "a8 10101000\n",
      "1b 00011011\n",
      "16 00010110\n",
      "3e 00111110\n",
      "39 00111001\n",
      "ed 11101101\n",
      "af 10101111\n",
      "0b 00001011\n",
      "19 00011001\n",
      "bf 10111111\n",
      "8b 10001011\n",
      "ce 11001110\n",
      "f2 11110010\n",
      "f0 11110000\n",
      "3d 00111101\n",
      "41 01000001\n",
      "9c 10011100\n",
      "35 00110101\n",
      "b4 10110100\n",
      "a6 10100110\n",
      "42 01000010\n",
      "6a 01101010\n",
      "bb 10111011\n",
      "2a 00101010\n",
      "69 01101001\n",
      "38 00111000\n",
      "d4 11010100\n",
      "d2 11010010\n",
      "ec 11101100\n",
      "79 01111001\n",
      "54 01010100\n",
      "b4 10110100\n",
      "32 00110010\n",
      "ab 10101011\n",
      "9e 10011110\n",
      "72 01110010\n",
      "9d 10011101\n",
      "eb 11101011\n",
      "3f 00111111\n",
      "ab 10101011\n",
      "4e 01001110\n",
      "c2 11000010\n",
      "50 01010000\n",
      "99 10011001\n",
      "a3 10100011\n",
      "66 01100110\n",
      "53 01010011\n",
      "3d 00111101\n",
      "3b 00111011\n",
      "ac 10101100\n",
      "fa 11111010\n",
      "f9 11111001\n",
      "bd 10111101\n",
      "33 00110011\n",
      "05 00000101\n",
      "0f 00001111\n",
      "9b 10011011\n",
      "b1 10110001\n",
      "2b 00101011\n",
      "4d 01001101\n",
      "6c 01101100\n",
      "fd 11111101\n",
      "bf 10111111\n",
      "6e 01101110\n",
      "11 00010001\n",
      "67 01100111\n",
      "6e 01101110\n",
      "4a 01001010\n",
      "7b 01111011\n",
      "dd 11011101\n",
      "03 00000011\n",
      "33 00110011\n",
      "20 00100000\n",
      "e8 11101000\n",
      "0c 00001100\n",
      "99 10011001\n",
      "cd 11001101\n",
      "44 01000100\n",
      "c8 11001000\n",
      "2b 00101011\n",
      "8e 10001110\n",
      "f1 11110001\n",
      "96 10010110\n",
      "7b 01111011\n",
      "f6 11110110\n",
      "fb 11111011\n",
      "54 01010100\n",
      "f7 11110111\n",
      "c5 11000101\n",
      "cd 11001101\n",
      "bb 10111011\n",
      "90 10010000\n",
      "4b 01001011\n",
      "9e 10011110\n",
      "a3 10100011\n",
      "f2 11110010\n",
      "e1 11100001\n",
      "4e 01001110\n",
      "36 00110110\n",
      "2d 00101101\n",
      "cf 11001111\n",
      "8d 10001101\n",
      "f0 11110000\n",
      "d5 11010101\n",
      "ce 11001110\n",
      "c0 11000000\n",
      "b7 10110111\n",
      "79 01111001\n",
      "25 00100101\n",
      "d2 11010010\n",
      "84 10000100\n",
      "2a 00101010\n",
      "74 01110100\n",
      "75 01110101\n",
      "1a 00011010\n",
      "b2 10110010\n",
      "e6 11100110\n",
      "6b 01101011\n",
      "62 01100010\n",
      "07 00000111\n",
      "09 00001001\n",
      "25 00100101\n",
      "6d 01101101\n",
      "39 00111001\n",
      "ea 11101010\n",
      "18 00011000\n",
      "5e 01011110\n",
      "7f 01111111\n",
      "38 00111000\n",
      "6c 01101100\n",
      "c7 11000111\n",
      "ea 11101010\n",
      "5d 01011101\n",
      "26 00100110\n",
      "11 00010001\n",
      "94 10010100\n",
      "a0 10100000\n",
      "5f 01011111\n",
      "86 10000110\n",
      "bd 10111101\n",
      "8b 10001011\n",
      "7c 01111100\n",
      "bc 10111100\n",
      "ac 10101100\n",
      "51 01010001\n",
      "3a 00111010\n",
      "67 01100111\n",
      "e5 11100101\n",
      "c2 11000010\n",
      "f1 11110001\n",
      "a0 10100000\n",
      "96 10010110\n",
      "ea 11101010\n",
      "34 00110100\n",
      "f8 11111000\n",
      "84 10000100\n",
      "7f 01111111\n",
      "79 01111001\n",
      "22 00100010\n",
      "e2 11100010\n",
      "cc 11001100\n",
      "15 00010101\n",
      "3d 00111101\n",
      "59 01011001\n",
      "fe 11111110\n",
      "90 10010000\n",
      "c6 11000110\n",
      "33 00110011\n",
      "e9 11101001\n",
      "0c 00001100\n",
      "87 10000111\n",
      "91 10010001\n",
      "be 10111110\n",
      "9f 10011111\n",
      "d8 11011000\n",
      "93 10010011\n",
      "a8 10101000\n",
      "fa 11111010\n",
      "ed 11101101\n",
      "c6 11000110\n",
      "bc 10111100\n",
      "2a 00101010\n",
      "d4 11010100\n",
      "78 01111000\n",
      "75 01110101\n",
      "e7 11100111\n",
      "c0 11000000\n",
      "5f 01011111\n",
      "ac 10101100\n",
      "34 00110100\n",
      "e3 11100011\n",
      "42 01000010\n",
      "d6 11010110\n",
      "94 10010100\n",
      "9d 10011101\n",
      "4d 01001101\n",
      "81 10000001\n",
      "71 01110001\n",
      "e3 11100011\n",
      "25 00100101\n",
      "94 10010100\n",
      "e4 11100100\n",
      "a3 10100011\n",
      "d9 11011001\n",
      "13 00010011\n",
      "ef 11101111\n",
      "c3 11000011\n",
      "ac 10101100\n",
      "c7 11000111\n",
      "1f 00011111\n",
      "3d 00111101\n",
      "b5 10110101\n",
      "cf 11001111\n",
      "47 01000111\n",
      "dd 11011101\n",
      "bc 10111100\n",
      "00 00000000\n",
      "ea 11101010\n",
      "5f 01011111\n",
      "7a 01111010\n",
      "de 11011110\n",
      "3f 00111111\n",
      "a6 10100110\n",
      "56 01010110\n",
      "91 10010001\n",
      "5d 01011101\n",
      "ee 11101110\n",
      "3c 00111100\n",
      "80 10000000\n",
      "0c 00001100\n",
      "f4 11110100\n",
      "0d 00001101\n",
      "7d 01111101\n",
      "96 10010110\n",
      "5a 01011010\n",
      "d7 11010111\n",
      "49 01001001\n",
      "e8 11101000\n",
      "3a 00111010\n",
      "47 01000111\n",
      "65 01100101\n",
      "11 00010001\n",
      "43 01000011\n",
      "26 00100110\n",
      "b2 10110010\n",
      "e0 11100000\n",
      "30 00110000\n",
      "d1 11010001\n",
      "09 00001001\n",
      "d6 11010110\n",
      "8c 10001100\n",
      "f3 11110011\n",
      "81 10000001\n",
      "a7 10100111\n",
      "05 00000101\n",
      "99 10011001\n",
      "3a 00111010\n",
      "5a 01011010\n",
      "d4 11010100\n",
      "65 01100101\n",
      "7c 01111100\n",
      "2d 00101101\n",
      "4f 01001111\n",
      "7d 01111101\n",
      "b0 10110000\n",
      "5b 01011011\n",
      "b7 10110111\n",
      "c5 11000101\n",
      "13 00010011\n",
      "16 00010110\n",
      "35 00110101\n",
      "a4 10100100\n",
      "ff 11111111\n",
      "ce 11001110\n",
      "4a 01001010\n",
      "b6 10110110\n",
      "7a 01111010\n",
      "0a 00001010\n",
      "0d 00001101\n",
      "c2 11000010\n",
      "e0 11100000\n",
      "6a 01101010\n",
      "4b 01001011\n",
      "32 00110010\n",
      "9e 10011110\n",
      "04 00000100\n",
      "c8 11001000\n",
      "f2 11110010\n",
      "bf 10111111\n",
      "e8 11101000\n",
      "71 01110001\n",
      "2b 00101011\n",
      "bd 10111101\n",
      "e9 11101001\n",
      "f0 11110000\n",
      "c6 11000110\n",
      "ff 11111111\n",
      "42 01000010\n",
      "ec 11101100\n",
      "b8 10111000\n",
      "27 00100111\n",
      "9a 10011010\n",
      "74 01110100\n",
      "a8 10101000\n",
      "ae 10101110\n",
      "75 01110101\n",
      "6b 01101011\n",
      "6e 01101110\n",
      "f4 11110100\n",
      "2f 00101111\n",
      "e0 11100000\n",
      "b0 10110000\n",
      "70 01110000\n",
      "13 00010011\n",
      "e7 11100111\n",
      "15 00010101\n",
      "bd 10111101\n",
      "8e 10001110\n",
      "0d 00001101\n",
      "74 01110100\n",
      "9b 10011011\n",
      "c5 11000101\n",
      "5f 01011111\n",
      "8f 10001111\n",
      "5d 01011101\n",
      "07 00000111\n",
      "5b 01011011\n",
      "6d 01101101\n",
      "bd 10111101\n",
      "fd 11111101\n",
      "d4 11010100\n",
      "d1 11010001\n",
      "4f 01001111\n",
      "17 00010111\n",
      "bd 10111101\n",
      "54 01010100\n",
      "15 00010101\n",
      "2d 00101101\n",
      "cc 11001100\n",
      "d3 11010011\n",
      "b3 10110011\n",
      "9d 10011101\n",
      "67 01100111\n",
      "ae 10101110\n",
      "77 01110111\n",
      "db 11011011\n",
      "c8 11001000\n",
      "6f 01101111\n",
      "22 00100010\n",
      "ed 11101101\n",
      "64 01100100\n",
      "a2 10100010\n",
      "26 00100110\n",
      "d1 11010001\n",
      "a2 10100010\n",
      "7c 01111100\n",
      "45 01000101\n",
      "cf 11001111\n",
      "d9 11011001\n",
      "0d 00001101\n",
      "9f 10011111\n",
      "8b 10001011\n",
      "ac 10101100\n",
      "15 00010101\n",
      "bc 10111100\n",
      "42 01000010\n",
      "67 01100111\n",
      "c7 11000111\n",
      "6b 01101011\n",
      "af 10101111\n",
      "5e 01011110\n",
      "15 00010101\n",
      "25 00100101\n",
      "b3 10110011\n",
      "ef 11101111\n",
      "8a 10001010\n",
      "5b 01011011\n",
      "db 11011011\n",
      "fb 11111011\n",
      "fd 11111101\n",
      "86 10000110\n",
      "44 01000100\n",
      "04 00000100\n",
      "f6 11110110\n",
      "20 00100000\n",
      "35 00110101\n",
      "7b 01111011\n",
      "b4 10110100\n",
      "ed 11101101\n",
      "46 01000110\n",
      "29 00101001\n",
      "21 00100001\n",
      "20 00100000\n",
      "2e 00101110\n",
      "07 00000111\n",
      "b8 10111000\n",
      "5d 01011101\n",
      "72 01110010\n",
      "0e 00001110\n",
      "12 00010010\n",
      "f7 11110111\n",
      "23 00100011\n",
      "aa 10101010\n",
      "8d 10001101\n",
      "d1 11010001\n",
      "09 00001001\n",
      "9f 10011111\n",
      "eb 11101011\n",
      "3d 00111101\n",
      "ab 10101011\n",
      "05 00000101\n",
      "20 00100000\n",
      "7d 01111101\n",
      "1e 00011110\n",
      "0c 00001100\n",
      "1d 00011101\n",
      "f6 11110110\n",
      "d6 11010110\n",
      "8d 10001101\n",
      "6c 01101100\n",
      "5b 01011011\n",
      "62 01100010\n",
      "e3 11100011\n",
      "9e 10011110\n",
      "b2 10110010\n",
      "aa 10101010\n",
      "37 00110111\n",
      "4a 01001010\n",
      "4b 01001011\n",
      "7d 01111101\n",
      "06 00000110\n",
      "e2 11100010\n",
      "6d 01101101\n",
      "5a 01011010\n",
      "33 00110011\n",
      "ab 10101011\n",
      "90 10010000\n",
      "e1 11100001\n",
      "b6 10110110\n",
      "81 10000001\n",
      "11 00010001\n",
      "16 00010110\n",
      "91 10010001\n",
      "b5 10110101\n",
      "54 01010100\n",
      "68 01101000\n",
      "4f 01001111\n",
      "ff 11111111\n",
      "eb 11101011\n",
      "30 00110000\n",
      "a6 10100110\n",
      "5d 01011101\n",
      "7a 01111010\n",
      "0b 00001011\n",
      "2b 00101011\n",
      "24 00100100\n",
      "4e 01001110\n",
      "0c 00001100\n",
      "c0 11000000\n",
      "6b 01101011\n",
      "43 01000011\n",
      "85 10000101\n",
      "de 11011110\n",
      "c9 11001001\n",
      "8e 10001110\n",
      "8d 10001101\n",
      "6f 01101111\n",
      "d0 11010000\n",
      "a8 10101000\n",
      "00 00000000\n",
      "cf 11001111\n",
      "9a 10011010\n",
      "3a 00111010\n",
      "a5 10100101\n",
      "26 00100110\n",
      "8e 10001110\n",
      "a1 10100001\n",
      "2c 00101100\n",
      "57 01010111\n",
      "56 01010110\n",
      "72 01110010\n",
      "e8 11101000\n",
      "9e 10011110\n",
      "2a 00101010\n",
      "cc 11001100\n",
      "3f 00111111\n",
      "81 10000001\n",
      "fd 11111101\n",
      "9a 10011010\n",
      "c7 11000111\n",
      "14 00010100\n",
      "bb 10111011\n",
      "0b 00001011\n",
      "30 00110000\n",
      "b8 10111000\n",
      "53 01010011\n",
      "95 10010101\n",
      "80 10000000\n",
      "c6 11000110\n",
      "bf 10111111\n",
      "e8 11101000\n",
      "fa 11111010\n",
      "ad 10101101\n",
      "ca 11001010\n",
      "fe 11111110\n",
      "1e 00011110\n",
      "53 01010011\n",
      "00 00000000\n",
      "52 01010010\n",
      "a1 10100001\n",
      "e8 11101000\n",
      "2f 00101111\n",
      "98 10011000\n",
      "4b 01001011\n",
      "c6 11000110\n",
      "7c 01111100\n",
      "c7 11000111\n",
      "76 01110110\n",
      "cd 11001101\n",
      "ce 11001110\n",
      "cb 11001011\n",
      "d0 11010000\n",
      "8d 10001101\n",
      "88 10001000\n",
      "48 01001000\n",
      "db 11011011\n",
      "31 00110001\n",
      "6a 01101010\n",
      "fb 11111011\n",
      "10 00010000\n",
      "dc 11011100\n",
      "0e 00001110\n",
      "72 01110010\n",
      "24 00100100\n",
      "ae 10101110\n",
      "c8 11001000\n",
      "f2 11110010\n",
      "ec 11101100\n",
      "37 00110111\n",
      "53 01010011\n",
      "7e 01111110\n",
      "ba 10111010\n",
      "f4 11110100\n",
      "78 01111000\n",
      "82 10000010\n",
      "56 01010110\n",
      "40 01000000\n",
      "25 00100101\n",
      "b8 10111000\n",
      "45 01000101\n",
      "a6 10100110\n",
      "c2 11000010\n",
      "14 00010100\n",
      "2a 00101010\n",
      "d6 11010110\n",
      "5d 01011101\n",
      "51 01010001\n",
      "90 10010000\n",
      "4d 01001101\n",
      "bb 10111011\n",
      "02 00000010\n",
      "87 10000111\n",
      "ca 11001010\n",
      "23 00100011\n",
      "1a 00011010\n",
      "ee 11101110\n",
      "ef 11101111\n",
      "b9 10111001\n",
      "e8 11101000\n",
      "a2 10100010\n",
      "74 01110100\n",
      "c0 11000000\n",
      "20 00100000\n",
      "1d 00011101\n",
      "c6 11000110\n",
      "27 00100111\n",
      "86 10000110\n",
      "64 01100100\n",
      "3a 00111010\n",
      "7a 01111010\n",
      "8c 10001100\n",
      "3e 00111110\n",
      "e0 11100000\n",
      "07 00000111\n",
      "11 00010001\n",
      "a8 10101000\n",
      "7d 01111101\n",
      "1e 00011110\n",
      "dc 11011100\n",
      "6c 01101100\n",
      "f8 11111000\n",
      "2d 00101101\n",
      "0a 00001010\n",
      "d0 11010000\n",
      "c4 11000100\n",
      "07 00000111\n",
      "3d 00111101\n",
      "bc 10111100\n",
      "49 01001001\n",
      "68 01101000\n",
      "2a 00101010\n",
      "62 01100010\n",
      "37 00110111\n",
      "58 01011000\n",
      "ba 10111010\n",
      "9b 10011011\n",
      "69 01101001\n",
      "19 00011001\n",
      "cd 11001101\n",
      "da 11011010\n",
      "47 01000111\n",
      "c6 11000110\n",
      "91 10010001\n",
      "c9 11001001\n",
      "13 00010011\n",
      "28 00101000\n",
      "ae 10101110\n",
      "a4 10100100\n",
      "b5 10110101\n",
      "b5 10110101\n",
      "05 00000101\n",
      "84 10000100\n",
      "f5 11110101\n",
      "65 01100101\n",
      "25 00100101\n",
      "be 10111110\n",
      "9e 10011110\n",
      "98 10011000\n",
      "1c 00011100\n",
      "b5 10110101\n",
      "78 01111000\n",
      "bf 10111111\n",
      "ee 11101110\n",
      "3b 00111011\n",
      "12 00010010\n",
      "5d 01011101\n",
      "8c 10001100\n",
      "a2 10100010\n",
      "62 01100010\n",
      "da 11011010\n",
      "13 00010011\n",
      "fd 11111101\n",
      "ba 10111010\n",
      "3f 00111111\n",
      "84 10000100\n",
      "46 01000110\n",
      "97 10010111\n",
      "bb 10111011\n",
      "9a 10011010\n",
      "09 00001001\n",
      "a1 10100001\n",
      "74 01110100\n",
      "5e 01011110\n",
      "45 01000101\n",
      "cd 11001101\n",
      "74 01110100\n",
      "69 01101001\n",
      "05 00000101\n",
      "19 00011001\n",
      "c8 11001000\n",
      "3e 00111110\n",
      "6a 01101010\n",
      "6a 01101010\n",
      "de 11011110\n",
      "f9 11111001\n",
      "6c 01101100\n",
      "f0 11110000\n",
      "7e 01111110\n",
      "56 01010110\n",
      "af 10101111\n",
      "54 01010100\n",
      "2a 00101010\n",
      "6c 01101100\n",
      "37 00110111\n",
      "47 01000111\n",
      "4b 01001011\n",
      "b5 10110101\n",
      "53 01010011\n",
      "fa 11111010\n",
      "10 00010000\n",
      "90 10010000\n",
      "91 10010001\n",
      "86 10000110\n",
      "47 01000111\n",
      "76 01110110\n",
      "66 01100110\n",
      "36 00110110\n",
      "7b 01111011\n",
      "39 00111001\n",
      "9c 10011100\n",
      "44 01000100\n",
      "b4 10110100\n",
      "5f 01011111\n",
      "62 01100010\n",
      "ec 11101100\n",
      "2f 00101111\n",
      "74 01110100\n",
      "34 00110100\n",
      "18 00011000\n",
      "c1 11000001\n",
      "da 11011010\n",
      "f0 11110000\n",
      "01 00000001\n",
      "56 01010110\n",
      "e9 11101001\n",
      "2b 00101011\n",
      "ff 11111111\n",
      "fe 11111110\n",
      "a6 10100110\n",
      "f8 11111000\n",
      "bd 10111101\n",
      "d9 11011001\n",
      "f1 11110001\n",
      "d8 11011000\n",
      "9b 10011011\n",
      "40 01000000\n",
      "b8 10111000\n",
      "f7 11110111\n",
      "4f 01001111\n",
      "0d 00001101\n",
      "58 01011000\n",
      "dc 11011100\n",
      "81 10000001\n",
      "b4 10110100\n",
      "9d 10011101\n",
      "e4 11100100\n",
      "de 11011110\n",
      "ae 10101110\n",
      "63 01100011\n",
      "1f 00011111\n",
      "ac 10101100\n",
      "6d 01101101\n",
      "12 00010010\n",
      "31 00110001\n",
      "76 01110110\n",
      "35 00110101\n",
      "2e 00101110\n",
      "d3 11010011\n",
      "a8 10101000\n",
      "6c 01101100\n",
      "b2 10110010\n",
      "dc 11011100\n",
      "26 00100110\n",
      "8c 10001100\n",
      "5a 01011010\n",
      "d6 11010110\n",
      "e6 11100110\n",
      "1f 00011111\n",
      "63 01100011\n",
      "75 01110101\n",
      "35 00110101\n",
      "d4 11010100\n",
      "e5 11100101\n",
      "dc 11011100\n",
      "dd 11011101\n",
      "54 01010100\n",
      "37 00110111\n",
      "85 10000101\n",
      "49 01001001\n",
      "22 00100010\n",
      "21 00100001\n",
      "d7 11010111\n",
      "91 10010001\n",
      "4b 01001011\n",
      "e5 11100101\n",
      "e9 11101001\n",
      "dc 11011100\n",
      "3e 00111110\n",
      "28 00101000\n",
      "cb 11001011\n",
      "70 01110000\n",
      "f0 11110000\n",
      "f4 11110100\n",
      "db 11011011\n",
      "ed 11101101\n",
      "7d 01111101\n",
      "1d 00011101\n",
      "78 01111000\n",
      "33 00110011\n",
      "32 00110010\n",
      "2c 00101100\n",
      "07 00000111\n",
      "38 00111000\n",
      "b4 10110100\n",
      "52 01010010\n",
      "3c 00111100\n",
      "02 00000010\n",
      "71 01110001\n",
      "2a 00101010\n",
      "d2 11010010\n",
      "c4 11000100\n",
      "60 01100000\n",
      "af 10101111\n",
      "52 01010010\n",
      "99 10011001\n",
      "14 00010100\n",
      "17 00010111\n",
      "38 00111000\n",
      "48 01001000\n",
      "5a 01011010\n",
      "33 00110011\n",
      "85 10000101\n",
      "4d 01001101\n",
      "3d 00111101\n",
      "90 10010000\n",
      "b6 10110110\n",
      "61 01100001\n",
      "6c 01101100\n",
      "3f 00111111\n",
      "cc 11001100\n",
      "61 01100001\n",
      "2f 00101111\n",
      "66 01100110\n",
      "88 10001000\n",
      "88 10001000\n",
      "1f 00011111\n",
      "d5 11010101\n",
      "fc 11111100\n",
      "a4 10100100\n",
      "7d 01111101\n",
      "2f 00101111\n",
      "95 10010101\n",
      "a5 10100101\n",
      "ae 10101110\n",
      "a5 10100101\n",
      "ae 10101110\n",
      "e0 11100000\n",
      "00 00000000\n",
      "af 10101111\n",
      "1c 00011100\n",
      "1d 00011101\n",
      "be 10111110\n",
      "eb 11101011\n",
      "94 10010100\n",
      "58 01011000\n",
      "d6 11010110\n",
      "39 00111001\n",
      "b1 10110001\n",
      "ad 10101101\n",
      "df 11011111\n",
      "8c 10001100\n",
      "b5 10110101\n",
      "cb 11001011\n",
      "7e 01111110\n",
      "ae 10101110\n",
      "68 01101000\n",
      "20 00100000\n",
      "f4 11110100\n",
      "ad 10101101\n",
      "81 10000001\n",
      "a2 10100010\n",
      "34 00110100\n",
      "63 01100011\n",
      "6d 01101101\n",
      "79 01111001\n",
      "15 00010101\n",
      "78 01111000\n",
      "37 00110111\n",
      "cc 11001100\n",
      "96 10010110\n",
      "57 01010111\n",
      "54 01010100\n",
      "d6 11010110\n",
      "c5 11000101\n",
      "ed 11101101\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "35 00110101\n",
      "79 01111001\n",
      "ef 11101111\n",
      "84 10000100\n",
      "f1 11110001\n",
      "06 00000110\n",
      "7e 01111110\n",
      "b1 10110001\n",
      "fd 11111101\n",
      "17 00010111\n",
      "40 01000000\n",
      "2a 00101010\n",
      "77 01110111\n",
      "65 01100101\n",
      "b4 10110100\n",
      "97 10010111\n",
      "dc 11011100\n",
      "bb 10111011\n",
      "b8 10111000\n",
      "e7 11100111\n",
      "1b 00011011\n",
      "3b 00111011\n",
      "5e 01011110\n",
      "f7 11110111\n",
      "38 00111000\n",
      "c4 11000100\n",
      "5e 01011110\n",
      "bc 10111100\n",
      "4d 01001101\n",
      "04 00000100\n",
      "6f 01101111\n",
      "64 01100100\n",
      "7f 01111111\n",
      "48 01001000\n",
      "1c 00011100\n",
      "f1 11110001\n",
      "a9 10101001\n",
      "38 00111000\n",
      "3e 00111110\n",
      "23 00100011\n",
      "0c 00001100\n",
      "3a 00111010\n",
      "40 01000000\n",
      "6b 01101011\n",
      "e9 11101001\n",
      "71 01110001\n",
      "df 11011111\n",
      "5f 01011111\n",
      "4d 01001101\n",
      "c1 11000001\n",
      "3b 00111011\n",
      "62 01100010\n",
      "da 11011010\n",
      "0d 00001101\n",
      "78 01111000\n",
      "b9 10111001\n",
      "4a 01001010\n",
      "55 01010101\n",
      "19 00011001\n",
      "74 01110100\n",
      "3b 00111011\n",
      "c5 11000101\n",
      "55 01010101\n",
      "37 00110111\n",
      "58 01011000\n",
      "c6 11000110\n",
      "b4 10110100\n",
      "3e 00111110\n",
      "a3 10100011\n",
      "16 00010110\n",
      "7a 01111010\n",
      "3c 00111100\n",
      "7c 01111100\n",
      "c6 11000110\n",
      "14 00010100\n",
      "de 11011110\n",
      "30 00110000\n",
      "cc 11001100\n",
      "f6 11110110\n",
      "fc 11111100\n",
      "5c 01011100\n",
      "e9 11101001\n",
      "0e 00001110\n",
      "85 10000101\n",
      "0d 00001101\n",
      "9f 10011111\n",
      "e5 11100101\n",
      "10 00010000\n",
      "ff 11111111\n",
      "be 10111110\n",
      "fd 11111101\n",
      "e9 11101001\n",
      "8f 10001111\n",
      "27 00100111\n",
      "de 11011110\n",
      "7d 01111101\n",
      "0d 00001101\n",
      "fd 11111101\n",
      "a0 10100000\n",
      "5b 01011011\n",
      "1f 00011111\n",
      "53 01010011\n",
      "84 10000100\n",
      "62 01100010\n",
      "cb 11001011\n",
      "bb 10111011\n",
      "46 01000110\n",
      "8c 10001100\n",
      "2b 00101011\n",
      "61 01100001\n",
      "23 00100011\n",
      "62 01100010\n",
      "53 01010011\n",
      "ae 10101110\n",
      "d3 11010011\n",
      "d6 11010110\n",
      "62 01100010\n",
      "95 10010101\n",
      "bf 10111111\n",
      "d9 11011001\n",
      "6d 01101101\n",
      "68 01101000\n",
      "29 00101001\n",
      "84 10000100\n",
      "df 11011111\n",
      "50 01010000\n",
      "d0 11010000\n",
      "7e 01111110\n",
      "a8 10101000\n",
      "70 01110000\n",
      "66 01100110\n",
      "e8 11101000\n",
      "1c 00011100\n",
      "d8 11011000\n",
      "fe 11111110\n",
      "6f 01101111\n",
      "33 00110011\n",
      "72 01110010\n",
      "ac 10101100\n",
      "47 01000111\n",
      "52 01010010\n",
      "0e 00001110\n",
      "98 10011000\n",
      "56 01010110\n",
      "f6 11110110\n",
      "fc 11111100\n",
      "b9 10111001\n",
      "c7 11000111\n",
      "75 01110101\n",
      "93 10010011\n",
      "7a 01111010\n",
      "6b 01101011\n",
      "35 00110101\n",
      "c4 11000100\n",
      "15 00010101\n",
      "82 10000010\n",
      "58 01011000\n",
      "58 01011000\n",
      "66 01100110\n",
      "70 01110000\n",
      "a2 10100010\n",
      "2b 00101011\n",
      "74 01110100\n",
      "b3 10110011\n",
      "86 10000110\n",
      "39 00111001\n",
      "ff 11111111\n",
      "f6 11110110\n",
      "44 01000100\n",
      "ae 10101110\n",
      "ca 11001010\n",
      "94 10010100\n",
      "fc 11111100\n",
      "22 00100010\n",
      "e4 11100100\n",
      "f3 11110011\n",
      "3e 00111110\n",
      "f3 11110011\n",
      "d3 11010011\n",
      "7f 01111111\n",
      "35 00110101\n",
      "24 00100100\n",
      "ac 10101100\n",
      "d0 11010000\n",
      "c5 11000101\n",
      "31 00110001\n",
      "7f 01111111\n",
      "12 00010010\n",
      "74 01110100\n",
      "42 01000010\n",
      "51 01010001\n",
      "c3 11000011\n",
      "37 00110111\n",
      "7f 01111111\n",
      "39 00111001\n",
      "ad 10101101\n",
      "5d 01011101\n",
      "a5 10100101\n",
      "b9 10111001\n",
      "d4 11010100\n",
      "df 11011111\n",
      "cd 11001101\n",
      "4b 01001011\n",
      "f7 11110111\n",
      "54 01010100\n",
      "e2 11100010\n",
      "c8 11001000\n",
      "64 01100100\n",
      "a5 10100101\n",
      "60 01100000\n",
      "90 10010000\n",
      "59 01011001\n",
      "93 10010011\n",
      "47 01000111\n",
      "59 01011001\n",
      "fa 11111010\n",
      "59 01011001\n",
      "1d 00011101\n",
      "36 00110110\n",
      "c8 11001000\n",
      "cb 11001011\n",
      "53 01010011\n",
      "2b 00101011\n",
      "57 01010111\n",
      "05 00000101\n",
      "bf 10111111\n",
      "7a 01111010\n",
      "36 00110110\n",
      "ab 10101011\n",
      "2b 00101011\n",
      "4a 01001010\n",
      "ce 11001110\n",
      "9b 10011011\n",
      "38 00111000\n",
      "4d 01001101\n",
      "f2 11110010\n",
      "07 00000111\n",
      "b2 10110010\n",
      "95 10010101\n",
      "ce 11001110\n",
      "96 10010110\n",
      "1c 00011100\n",
      "d6 11010110\n",
      "00 00000000\n",
      "bb 10111011\n",
      "62 01100010\n",
      "c4 11000100\n",
      "29 00101001\n",
      "fb 11111011\n",
      "a3 10100011\n",
      "a4 10100100\n",
      "a6 10100110\n",
      "b0 10110000\n",
      "50 01010000\n",
      "59 01011001\n",
      "1a 00011010\n",
      "1a 00011010\n",
      "18 00011000\n",
      "8e 10001110\n",
      "b5 10110101\n",
      "1a 00011010\n",
      "2d 00101101\n",
      "30 00110000\n",
      "7e 01111110\n",
      "8e 10001110\n",
      "f7 11110111\n",
      "5f 01011111\n",
      "41 01000001\n",
      "76 01110110\n",
      "9a 10011010\n",
      "6b 01101011\n",
      "ac 10101100\n",
      "01 00000001\n",
      "30 00110000\n",
      "29 00101001\n",
      "69 01101001\n",
      "aa 10101010\n",
      "1e 00011110\n",
      "2c 00101100\n",
      "1e 00011110\n",
      "84 10000100\n",
      "a0 10100000\n",
      "26 00100110\n",
      "e5 11100101\n",
      "34 00110100\n",
      "26 00100110\n",
      "85 10000101\n",
      "e9 11101001\n",
      "01 00000001\n",
      "1b 00011011\n",
      "83 10000011\n",
      "63 01100011\n",
      "b4 10110100\n",
      "47 01000111\n",
      "e3 11100011\n",
      "96 10010110\n",
      "5a 01011010\n",
      "dc 11011100\n",
      "cf 11001111\n",
      "01 00000001\n",
      "5a 01011010\n",
      "06 00000110\n",
      "a9 10101001\n",
      "89 10001001\n",
      "77 01110111\n",
      "79 01111001\n",
      "b0 10110000\n",
      "7b 01111011\n",
      "d6 11010110\n",
      "d1 11010001\n",
      "98 10011000\n",
      "e8 11101000\n",
      "4f 01001111\n",
      "52 01010010\n",
      "a4 10100100\n",
      "86 10000110\n",
      "33 00110011\n",
      "f2 11110010\n",
      "5f 01011111\n",
      "8a 10001010\n",
      "56 01010110\n",
      "62 01100010\n",
      "b4 10110100\n",
      "b3 10110011\n",
      "7f 01111111\n",
      "eb 11101011\n",
      "bb 10111011\n",
      "ee 11101110\n",
      "b3 10110011\n",
      "c3 11000011\n",
      "96 10010110\n",
      "75 01110101\n",
      "c4 11000100\n",
      "20 00100000\n",
      "21 00100001\n",
      "53 01010011\n",
      "d3 11010011\n",
      "dc 11011100\n",
      "d7 11010111\n",
      "58 01011000\n",
      "09 00001001\n",
      "35 00110101\n",
      "4f 01001111\n",
      "b3 10110011\n",
      "59 01011001\n",
      "b4 10110100\n",
      "5b 01011011\n",
      "e7 11100111\n",
      "14 00010100\n",
      "c1 11000001\n",
      "bc 10111100\n",
      "63 01100011\n",
      "81 10000001\n",
      "76 01110110\n",
      "e5 11100101\n",
      "ec 11101100\n",
      "59 01011001\n",
      "bc 10111100\n",
      "3b 00111011\n",
      "68 01101000\n",
      "92 10010010\n",
      "c5 11000101\n",
      "a7 10100111\n",
      "67 01100111\n",
      "95 10010101\n",
      "99 10011001\n",
      "0f 00001111\n",
      "cf 11001111\n",
      "80 10000000\n",
      "05 00000101\n",
      "b5 10110101\n",
      "15 00010101\n",
      "62 01100010\n",
      "f8 11111000\n",
      "fe 11111110\n",
      "fa 11111010\n",
      "05 00000101\n",
      "9f 10011111\n",
      "cb 11001011\n",
      "1b 00011011\n",
      "11 00010001\n",
      "99 10011001\n",
      "62 01100010\n",
      "52 01010010\n",
      "cf 11001111\n",
      "97 10010111\n",
      "b2 10110010\n",
      "fb 11111011\n",
      "7b 01111011\n",
      "75 01110101\n",
      "2c 00101100\n",
      "f2 11110010\n",
      "04 00000100\n",
      "6b 01101011\n",
      "1b 00011011\n",
      "82 10000010\n",
      "b3 10110011\n",
      "29 00101001\n",
      "09 00001001\n",
      "ea 11101010\n",
      "93 10010011\n",
      "46 01000110\n",
      "06 00000110\n",
      "62 01100010\n",
      "e8 11101000\n",
      "2c 00101100\n",
      "14 00010100\n",
      "3a 00111010\n",
      "0f 00001111\n",
      "f9 11111001\n",
      "21 00100001\n",
      "ee 11101110\n",
      "e6 11100110\n",
      "6c 01101100\n",
      "9f 10011111\n",
      "1d 00011101\n",
      "55 01010101\n",
      "a1 10100001\n",
      "97 10010111\n",
      "1c 00011100\n",
      "b5 10110101\n",
      "9b 10011011\n",
      "11 00010001\n",
      "d1 11010001\n",
      "24 00100100\n",
      "a1 10100001\n",
      "37 00110111\n",
      "41 01000001\n",
      "4d 01001101\n",
      "9d 10011101\n",
      "c7 11000111\n",
      "05 00000101\n",
      "0a 00001010\n",
      "ba 10111010\n",
      "44 01000100\n",
      "04 00000100\n",
      "6d 01101101\n",
      "bb 10111011\n",
      "57 01010111\n",
      "4e 01001110\n",
      "e7 11100111\n",
      "e1 11100001\n",
      "86 10000110\n",
      "35 00110101\n",
      "f1 11110001\n",
      "83 10000011\n",
      "9a 10011010\n",
      "6f 01101111\n",
      "9b 10011011\n",
      "43 01000011\n",
      "c6 11000110\n",
      "0f 00001111\n",
      "d8 11011000\n",
      "8f 10001111\n",
      "05 00000101\n",
      "ab 10101011\n",
      "86 10000110\n",
      "82 10000010\n",
      "21 00100001\n",
      "b6 10110110\n",
      "cc 11001100\n",
      "d8 11011000\n",
      "33 00110011\n",
      "4f 01001111\n",
      "49 01001001\n",
      "c1 11000001\n",
      "38 00111000\n",
      "a3 10100011\n",
      "67 01100111\n",
      "22 00100010\n",
      "48 01001000\n",
      "88 10001000\n",
      "0b 00001011\n",
      "7e 01111110\n",
      "ef 11101111\n",
      "89 10001001\n",
      "a0 10100000\n",
      "ef 11101111\n",
      "de 11011110\n",
      "d1 11010001\n",
      "84 10000100\n",
      "0d 00001101\n",
      "a6 10100110\n",
      "d3 11010011\n",
      "18 00011000\n",
      "8e 10001110\n",
      "c5 11000101\n",
      "db 11011011\n",
      "45 01000101\n",
      "b5 10110101\n",
      "f5 11110101\n",
      "62 01100010\n",
      "ca 11001010\n",
      "d0 11010000\n",
      "9b 10011011\n",
      "f2 11110010\n",
      "89 10001001\n",
      "1a 00011010\n",
      "79 01111001\n",
      "07 00000111\n",
      "7c 01111100\n",
      "ea 11101010\n",
      "fa 11111010\n",
      "fb 11111011\n",
      "f9 11111001\n",
      "9a 10011010\n",
      "42 01000010\n",
      "6e 01101110\n",
      "ee 11101110\n",
      "86 10000110\n",
      "fc 11111100\n",
      "dd 11011101\n",
      "7d 01111101\n",
      "3c 00111100\n",
      "2c 00101100\n",
      "f8 11111000\n",
      "45 01000101\n",
      "9f 10011111\n",
      "87 10000111\n",
      "0e 00001110\n",
      "10 00010000\n",
      "b4 10110100\n",
      "fd 11111101\n",
      "a4 10100100\n",
      "a7 10100111\n",
      "14 00010100\n",
      "df 11011111\n"
     ]
    }
   ],
   "source": [
    "c = [print(hex(i)[2:].zfill(2), bin(i)[2:].zfill(8)) for i in b]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "SPS\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "b'\\x00\\x00\\x00\\x01gM\\x00\\x1e\\x965A`$\\xd3p\\x10\\x10\\x14\\x00\\x00\\x1c \\x00\\x05~@\\x10'"
      ]
     },
     "execution_count": 16,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "parse_rtp_payload(rtp_payload[0])"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.8.5"
  },
  "toc": {
   "base_numbering": 1,
   "nav_menu": {},
   "number_sections": true,
   "sideBar": true,
   "skip_h1_title": false,
   "title_cell": "Table of Contents",
   "title_sidebar": "Contents",
   "toc_cell": false,
   "toc_position": {
    "height": "556.89px",
    "left": "668px",
    "top": "216.14px",
    "width": "250.75px"
   },
   "toc_section_display": true,
   "toc_window_display": true
  },
  "varInspector": {
   "cols": {
    "lenName": 16,
    "lenType": 16,
    "lenVar": 40
   },
   "kernels_config": {
    "python": {
     "delete_cmd_postfix": "",
     "delete_cmd_prefix": "del ",
     "library": "var_list.py",
     "varRefreshCmd": "print(var_dic_list())"
    },
    "r": {
     "delete_cmd_postfix": ") ",
     "delete_cmd_prefix": "rm(",
     "library": "var_list.r",
     "varRefreshCmd": "cat(var_dic_list()) "
    }
   },
   "position": {
    "height": "327.86px",
    "left": "1246.77px",
    "right": "20px",
    "top": "121px",
    "width": "305px"
   },
   "types_to_exclude": [
    "module",
    "function",
    "builtin_function_or_method",
    "instance",
    "_Feature"
   ],
   "window_display": false
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
